メリー・クリスマス @HIROCASTER でございませう。
今日はクリスマス。そしてRubyのリリース日です。
今年はRuby2.3.0のリリースです。
すでにリリースについてはRuby Core Teamからアナウンスがされています。リリースおめでとうございます。
RubyKaigi2015でも触れられていましたが、Ruby2.3.0の目立った新しい機能について触れておきたいと思います。
frozen-string-literal pragma
文字列リテラルをfreeze(普遍)にするための機能です。Ruby2.3ではファイル単位でこの機能を有効にするマジックコメント(pragma)が利用することができます。
frozen_string_literal: true
というコメントをファイルに挿入していれば、文字列リテラルがデフォルトでfreezeされます。
# frozen_string_literal: true
"Merry Christmas".frozen? # => true
Ruby実行時ににオプション(–enable=frozen-string-literal –disable=frozen-string-literal)を与えることでもマジックコメントなしでこの機能を有効・無効にすることができます。
safe navigation operator
ActiveSupportのtry!
と同等の機能を提供する&.
という通称「ぼっちオペレータ」が導入されました。
# メソッド呼び出し時にこのオペレータを利用する
"Merry Christmas"&.reverse # => "samtsirhC yrreM"
# nilかも知れないオブジェクトのメソッドを呼ぶときに利用すればnilが返される
nil&.reverse # => nil
# チェーンして利用することも可能
nil&.reverse&.reverse # => nil
# 通常はこのようにNoMethodErrorが発生
nil.reverse # => NoMethodError
# そもそも定義されてないメソッドを呼ぶとNoMethodError
"Merry Christmas"&.botti # => NoMethodError
このようにActiveSupportのtry!
と同等の機能がRuby本体に組み込まれました。
try
との機能の違いは、定義されてないメソッドを呼びだされた時にnil
を返すかNoMethodError
を返すかの違いです。
the did_you_mean gem
Googleの検索結果でよく見る「もしかして?」の機能のGemがRuby本体に同梱されるようになりました。
メソッドのスペルミスをすると下記のように「Did you mean?」と、呼びたかったメソッド候補を教えてくれます。
"Yuki".starts_with?("Y")
undefined method `starts_with?' for "Yuki":String (NoMethodError)
Did you mean? start_with?
以前からこのGemを知っていたので、本体に同梱されることになり、嬉しい限りです。
開発を続けている@yuki24さん、おめでとうございます。
Core classes updates
数多くの機能がそれぞれのクラスにも追加されています。
NEWS for Ruby 2.3.0を見るとRuby2.2.0からの変更点がまとめられています。気になる機能があったらそれぞれのドキュメントを確認することをおすすめします。