転職活動において、技術試験がいくつか出されており、改めてこちらの本でRubyの勉強をしています。
https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227
そのアウトプットとして、よくRailsでみるRubyの記法が解説されていたので、アウトプットさせてください。
nilガード
number||=10
上と下は同じ意味
number||(number= 10)
もしもnumberがあれば、number なければnumberに10を代入する
使うとき
- 変数にnilが入っているかもしれない状況で、nilの代わりになにかデフォルト値を入れておきたい場面で使う
- 認証のcurrent_userとかで使うイメージ
ボッチ演算子
&.
記法のこと
&.
を使って演算子を使ってメソッドを呼び出すと、レシーバーがnilで合った場合でもエラーが発生しなくなる
正式名称は「safe navigation operator」
if文や三項演算子を使ってこのように記載するか、
name= object ? object.name : nil
こうかける
name=object&.name
上下のコードは同じ意味になる
%記法
すべての要素が文字列である配列は「%w」を使ってかける
> ary1 =['apple','banana','orange']
=> ["apple", "banana", "orange"]
> puts ary1
apple
banana
orange
=> nil
> ary2 = %w(apple banana orange)
=> ["apple", "banana", "orange"]
> p ary2
["apple", "banana", "orange"]
=> ["apple", "banana", "orange"]
すべての要素がシンボルの場合、「%i」
> ary3=[:apple,:banana,:orange]
=> [:apple, :banana, :orange]
> p ary3
[:apple, :banana, :orange]
=> [:apple, :banana, :orange]
> ary4=%i(apple banana orange)
=> [:apple, :banana, :orange]
> p ary4
[:apple, :banana, :orange]
=> [:apple, :banana, :orange]
このように書くほうが、可読性が高くなる
配列の各要素から特定の属性だけを取り出す
class User
attr_accessor :name
# name属性を付与
end
user1=User.new
user1.name= 'Aさん'
user2=User.new
user2.name= 'Bさん'
user3=User.new
user3.name= 'Cさん'
users=[user1,user2,user3]
このコードではusers配列に3つのUserオブジェクトが入っている。
この配列からname情報のみの取得をする場合。
いくつかパターンがある
eachと<<を使う方法
# names配列を定義
names=[]
# users配列からname属性をnames配列へ格納していく
users.each do |user|
names << user.name
end
mapを使う方法
mapメソッドは配列に対してブロック(do 〜 endの中で指定した処理)を実行した結果を格納した新しい配列を返す
names=users.map do |user|
user.name
end
ブロックは{}でも記述できる
names=users.map{|user| user.name}
&とシンボルを使って次のようにもかける
names=users.map(&:name)
※ちなみに&はto_procメソッドの略らしい。
to_iは整数に直すのはよく見るが、to_procとはProcクラスにするメソッドのようです
https://style.potepan.com/articles/29663.html#:~:text=Proc%E3%81%A8%E3%81%AF%E3%80%8C%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92,%E6%B8%A1%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82
感想
いままで(&:)の意味がわからなかったけど、to_procメソッドとシンボルの組み合わせと知ることができた
コードを書きながら0からかけるようにして、自分のものにしていきたい。