RubyKaigiで尻の耐久試験をしてきました。
Ruby3.0は1.9以来の大変革になりそうですね。並列性を持たせるためにどういう仕組みが導入されるのか、本当に3倍速くなるのか、楽しみでなりません。
RubyMotionやmrubyに関してもかなり興味深い話を聞きました。クライアントもサーバもRubyで書く、Rubyistに(だけ)優しい世界はもうそこまで来ているのかもしれません。
未来への興味も尽きないわけですが、現在の話。
Kaigiの初日に合わせてRuby 2.3.0-preview2がリリースされました。
早速ダウンロードしましたが、新機能の中でもsafe navigation operatorはうれしいですね。
それと、ArrayとHashのdigもコードの削減にはかなり効きそうです。
が、試してみて一つ地味に驚いたことが。
h = Hash.new(0)
h.dig(:a, :b, :c)
#=> nil
見ての通り、Hashにデフォルト値を指定していても、
Hash#digで存在しないキーを掘り当てたときの戻り値はnilです。
おそらくArray#digと動作を合わせるための仕様なんでしょうけど、
メソッドチェインする場合なんかは地味に困りそうです。
そんなときのためのsafe navigation operatorなんでしょうけどね。
ちなみに、Rubyのsafe navigation operator(&.)は
Matz曰く「ぼっち演算子」なので、書いていると寂しくなりそうです。
長いメソッドチェインだと集団ぼっちなんでしょうか。
##追記
最近、
h = Hash.new(0)
h.dig(:a, :b, :c)はエラーになるようになりました(h[:a]の値0がdigをしらないので)。
とのこと。正式版はこの動作になると思われるので、深い階層の存在しない可能性のあるキーを掘る必要がある場合は下手にデフォルトを指定しない方が良さそうです。