【ruby】rubyでよく使うメソッドまとめ その2
その1から読みたい人はこちら
yasagori-programing.hatenablog.jp
to_hメソッド
値をハッシュ化する。
ary = [["name", "Coco"], ["age", 7]] ary.to_h => {"name"=>"Coco", "age"=>7}
valuesメソッド
hashのvalueだけを抽出する。
ary = [["name", "Coco"], ["age", 7]] ary.to_h.values => ["Coco", 7]
tapメソッド
tap
は自分自身にブロックを使って自分自身を返すメソッド。デバッグなんかでよく使われる。
ary = [1, 3, 5, 7] ary.map{|x| x * 2} => [2, 6, 10, 14] ary.map{|x| x * 2 }.select{|x| x > 10} => [14] ary.map{|x| x * 2 }.tap{|a| p a}.select{|x| x > 10} [2, 6, 10, 14] # tapの結果、ここではmapした結果のaを出力している => [14]
これを使うと他にも色々できる。よくやるのがハッシュ化。
ary = [1, 3, 5, 7] {}.tap{|h| ary.each{|x| h[x] = x * 2}} => {1=>2, 3=>6, 5=>10, 7=>14} # 分割するとこうも書ける {}.tap do |h| ary.each do |x| h[x] = x * 2 end end
空のハッシュを用意し、aryのそれぞれに対してx * 2をしたものを入れていく。
||=
よく使うこの子、パッとわからないことが多いから忘れないように。
x = 15 x ||= 2 => 15 # xには値が入っているからそれが反映される y ||= 10 => 10 # yにはまだ代入されていないから、y = 10となり出力される
find_by_attributes
Petテーブルがあった場合、attributesにテーブルのカラム名を入れると使える。
id | name | age | dog_breed |
---|---|---|---|
1 | Coco | 7 | Dachshund |
2 | Maru | 2 | Mix |
3 | Pochi | 5 | Shiba |
def index @my_dog = Pet.find_by_name("Maru") @japan_dogs = Pet.find_by_dog_breed("Shiba") end
compactメソッド
Arrayからnilを除く。
pets = ["Coco", "Maru", nil, "Shiba"] pets.compact => ["Coco", "Maru", "Shiba"]
rescueメソッド
例外の時の動作を指定する。
def foo(x) begin puts x * 5 if x > 0 rescue => e puts "error" end end foo(5) => 25 foo(0) => nil # xはintなのでbegin節で評価されている foo("a") => error # xがstrなのでbegin節で評価されないため、rescueの中が動く
ちなみにワンライナーで書くとこんな感じ
def foo(x) puts x * 5 if x > 0 rescue puts "error" end
まとめ
tapが難しい。。。