LoginSignup
0
0

More than 3 years have passed since last update.

Ruby学習5

Posted at

メソッドとか色々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までで奇数の出力。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0