今日は Ruby 2.6 がリリースされる日!!
今日は年に一度の Ruby がリリースされる日ですね!!!
クリスマス?知らないですねえ…。
と、言うことで Ruby 2.6 が無事にリリースされました。やったー!
そんなわけで気になった機能をいくつか上げてみようかと思います。
ちなみに Ruby 2.6 にパッチを10個ぐらい投げた結果 4つ取り込まれました。わーい。
Kernel#then が Kernel#yield_self のエイリアスとして追加
Kernel#yield_self のエイリアスとして Kernel#then が新しく追加されました。
yield_self が then と短く書けるやったー、と思う一方 then って名前はどうなんですかね…という思いもあり…。
まあ文字数が半分以下になるのは喜ばしいこと。
Enumerable#filter Enumerable#filter! が追加
Enumerable#select のエイリアスとして Enumerable#filter が追加されました。
これで同機能の Enumerable の絞り込みメソッドが
Enumerable#selectEnumerable#find_allEnumerable#filter
の3つに増えました。
知らない人から見るとますます混乱しそうな気もしますが…。
Ruby をやり始めた頃は『なんで filter がないんだよ』と思っていた思い出。
Proc#<<、Proc#>> が追加
Proc にはいわゆる関数合成を行う演算子が新しく追加されました。
f = proc{|x| x + 2} g = proc{|x| x * 3} p (f << g).call(3) # -> 11; identical to f(g(3)) p (f >> g).call(3) # -> 15; identical to g(f(3))
f << g は f(g()) になり、f >> g は g(f()) になります。
また、Method にも同等の演算子が追加されています。
f = proc{|x| x + 2} g = proc{|x| x * 3} p (1.method(:+) << 2.method(:*)).call(3) # => 7 (1 + (2 * 3)) p (1.method(:+) >> 2.method(:*)).call(3) # => 8 ((1 + 3) * 2) # Proc と組み合わせたり p (1.method(:+) << g).call(3) # => 10 ((3 * 3) + 1) p (f >> 2.method(:+)).call(3) # => 7 ((3 + 2) + 2)
Proc#<<、Proc#>> ともに『#call が定義されている』オブジェクトを渡すことが出来ます。
class G def call x x * 3 end end f = proc{|x| x + 2} g = G.new p (f << g).call(3) # => 11 f(g(3))
所感
と、いう感じで少しですが Ruby 2.6 の機能を取り上げてみました。
他には終端なし Range が追加されたり #to_h にブロック引数が追加されたりなどなど。
気になる方はリリースノートを見てみるといいともいます。
さて、Ruby 2.6 がリリースされたということは Ruby 2.7 の開発が始まったことになります。
Ruby 2.6 ではパッチを10個投げた結果 4つ取り込まれました。
Ruby 2.7 でもまだまだ追加したい機能がたくさんあるので、Ruby 2.7 ではもう少しがんばってパッチを投げていきたいと思います。
あと直せる範囲であればバグ修正とかも手伝えるといいですねえ…。
そんな感じで来年も Ruby 2.7 を楽しみにしています!!