5/30にRuby 2.7.0-preview1がリリースされましたね🎉
2.7の主要な新機能としては下記が記載されています👀
今回は、中でもメソッド参照演算子が個人的に結構気になっているので、それについて書いていこうかなと思います✍
メソッド参照演算子とは
メソッド参照演算子とは.:
という演算子でメソッドオブジェクトを取得できる演算子です。
サンプルコードは下記のような感じです。
irb(main):001:0> "0".:to_i => #<Method: String#to_i>
今まではClass#method
で取得することが出来ましたが、より簡単にかけるようになったという感じですね👀
メソッドオブジェクトとは
メソッドオブジェクトはメソッドから生成されたProcのようなものです。同じように#call
で実行できます。
irb(main):001:0> "0".:to_i => #<Method: String#to_i> irb(main):002:0> "0".:to_i.call => 0
Procとの違いとか詳細は、Rubyリファレンスマニュアルを参照してくださいm( )m
どう使えるのか?
こういうコレクションの各要素に対してオブジェクト以外のメソッドを適用したいときに便利そうですね👀
# 2.6 [0, 1, 2].map { |i| i + 1 } # 2.7 [0, 1, 2].map(&1.:+)
番号指定パラメータでもいい感じにかけるかもしれないですが、メソッド参照演算子の方が(&:hoge)
といった見慣れた形式でかけるので見やすそうですね。(下記のケースだとそうでもないですが。。。)
[0, 1, 2].map(&1.:+) => [1, 2, 3] [0, 1, 2].map{ @1 + 1 } => [1, 2, 3]
実践的な例だとcurrent_userと合致するuserを取得するとか、メソッド参照演算子を使うと&
を使ってスッキリかけますね👍
# 2.6 users.find { |user| corrent_user == user } # 2.7 users.find(&corrent_user.id.:eql?)
hashの配列をもとにモデルのオブジェクトの配列を取得するとかも、いい感じにかけそうですね✨
# 2.6 attrs.map { |attr| Blog.new(attr) } # 2.7 attrs.map(&Blog.:new)
おわりに
今回はruby 2.7の新機能のメソッド参照演算子を紹介してみました。2.7ではパターンマッチングや番号指定パラメータが話題になることが多いですが、irbやJITの改善とか他にもいろいろ注目すべき点がありそうですね🙌今から2.7のリリースが楽しみです✨