Ruby 2.2.0のリリースからほぼ1年,Ruby 2.3.0の最初のプレビューが発表された。今回のRuby 2.3.0 Preview 1には,不変文字列リテラルやnull合体演算子などの新機能が導入されている。
- 不変文字列リテラル: 次のような構文で文字列リテラルを”frozen”,つまり不変とマークすることが可能 -
CONSTANT_STRING = 'constant string'.freeze
これによって開発者の意図をより明確に示すことが可能になるとともに,Ruby開発者のMaciej Mensfeld氏の実施したベンチマーク結果が示すように,パフォーマンス上でも大きなメリットがある。文字列を既定値として不変にするためには,次のような”マジック”コメントを使用すればよい - # frozen_string_literal: true -
セーフナビゲーション演算子:
nil
の取り扱いを容易にするもので,C#やSwiftなど,他の言語で利用できるものに近い。これにより,nil
の明示的なチェックが不要になる。u = User.find(id) if u && u.profile && ...
オブジェクトを対象に,
&.
というnull合体演算子を使用することもできる。u = User.find(id) u&.profile...
Rubyの開発者であるMatzによると,この‘
&.
’という構文には,u && u.profile
という表現を連想させて理解しやすいというメリットに加えて,Rubyではメソッド名のサフィックスに使われることの多い‘?
’との混同を避ける意味もある。&.
演算子と同じく,配列やハッシュに追記する#dig
メソッドも新たに追加された。深くネストしたデータに対して,安全な方法でアクセスできるようになる。myHash.dig(:key1, :key2, :key3)
要求された位置に要素が存在しない場合,
#dig
はnil
を返す。 -
“did_you_mean” gemの言語への統合: コード内のミススペルの指摘,可能な修正方法の提案といった支援を行う。
Ruby 2.3.0にはその他にも,多数の新機能が含まれている。そのひとつである深いハッシュ比較(deep hash comparsion)では,ハッシュが同じキーを持っているかだけでなく,同じ値であるかどうかも含めて,数値と同じように2つのハッシュを比較することができる。また,列挙可能なオブジェクトの新機能である#grep_v
は,指定した正規表現にマッチしない要素をすべて返すものだ。新機能の完全なリストはリリースノートにある。