#メソッドとか色々5
現在、Ruby技術者認定試験silverを取得するべく勉強中です。
言語に対する理解がまだまだなので、基本的な事からアウトプットしていきます。
小数の切り捨て、切り上げ、四捨五入
###ceil = 小数点以下切り上げ
irb(main):001:0> 1.9.ceil
=> 2
###floor = 小数点以下切り捨て
irb(main):004:0> 1.9.floor
=> 1
###round =小数点以下四捨五入(厳密には最も近い整数を返す)
irb(main):006:0> 1.5.round
=> 2
irb(main):007:0> 1.4.round
=> 1
##joinメソッド
配列の要素同士を、引数指定した文字で区切り、結合した文字列を返す。
arr = ["無駄", "無駄", "無駄", "無駄ァ", "ッ!"]
p arr.join("!")
=> "無駄!無駄!無駄!無駄ァ!!"
##injectメソッドと条件演算子
模擬問題で詰まったところ。まずはコードから。
numbers = [3,89,40,39,29,10,50,59,69]
num = numbers.inject do |i,j|
i > j ? i : j
end
injectメソッドは、引数をつけた場合は引数を一つ目のブロック変数(i)に、配列の最初の要素を二つ目のブロック変数(j)に代入。do以降の式を実行。実行が終わったら計算結果をiに、配列の次の要素をjに代入。式を実行。以降繰り返して、配列の要素が最後までいったら結果を返す。引数をつけなかった場合は配列の最初と2番目の要素を代入してから開始する。
条件演算子
i > j ? i : j
真偽を問う左辺(?から左側)の式を実行後、trueの時に返す値を(:)の左に、falseの時に返す値を(:)の右に置く。なのでこの式は、「iがjより大きい場合はiを、そうでない場合はjを返す」という意味。
で、
これをinjectメソッドで実行するので、「配列の要素を比較して、大きい数値を残し、最終的に配列内で最も大きい数値を返すコード」になる。
##stepメソッド
1.step(100, 2) do |n|
puts n
end
レシーバの数値を起点として、第二引数の数値刻みで、数値が第一引数になるまで、式を実行する。ブロック変数nにはレシーバの数値が初期値として入る。コードを翻訳すると、
「レシーバの数値「1」を出力(puts n)した後、数値に2を足し再度実行(3を出力)。この数値が100に到達するまで実行する。」
今回は奇数が出力されていき、最後は99。2を足すと100を超えてしまうため、ここで終了。やってる事自体は、1から100までで奇数の出力。