Omotesando.rb #56 で LT してきた
約9ヶ月ぶりぐらいに Omotesando.rb が開催されて LT してきました。
今回ははじめてのオンライン開催です!
パターンマッチと右代入が便利になる gem をつくった
内容は前に pattern_matchable というパターンマッチで便利に使える gem をつくったのでその話をしてきました。
この gem を使うと以下のようにメソッド呼び出しに対してパターンマッチができます。
require "pattern_matchable" # Time クラスのみ拡張する using PatternMatchable Time class Time def to_four_seasons # month メソッドで判定する case self in { month: (3..5) } then "spring" in { month: (6..8) } then "summer" in { month: (9..11) } then "autumn" in { month: (1..2) } | { month: 12 } then "winter" end end end p Time.now.to_four_seasons # => "autumn" # 右代入でメソッドの結果を変数に代入できる Time.now => { hour:, min:, sec: } p hour # => 3 p min # => 35 p sec # => 45 # Array は拡張されない # error: ["homu", "mami", "mado"] (NoMatchingPatternError) case ["homu", "mami", "mado"] in { first:, last:, size: } end
これ、かなり便利だと思うんですよねえ。
パターンマッチは使うまでよくわからないと思うんですが実際使ってみるとかなり強力なので数年後は当たり前に使われている機能になっていると予想しています。