この記事をシェアする

Ruby2.3.0リリース 主な新機能についてサンプルコードとともに紹介

メリー・クリスマス @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からの変更点がまとめられています。気になる機能があったらそれぞれのドキュメントを確認することをおすすめします。

スポンサーリンク

この記事をシェアする

著者をフォローする