Ruby技術者認定試験に合格しよう! ~ゴールド編②~
- 編集部の見解や意向と異なる内容の場合があります
- 編集部は内容について正確性を保証できません
- 画像が表示されない場合、編集部では対応できません
- 内容の追加・修正も編集部では対応できません
CTC教育サービスはコラム「Ruby技術者認定試験に合格しよう! ~ゴールド編②~ 」を公開しました。
こんにちは、藺藤です。
今回のコラムでは、新しくリリースされた「Ruby 2.3」と、前回のコラムの続きで「Ruby技術者認定試験ゴールド試験のポイント」をご紹介します。
Ruby 2.3リリース!
昨年末にRubyの新しいバージョン「Ruby 2.3.0」がリリースされました。(*1) 早速、私も触ってみました。 様々な更新内容を含むリリースでしたが、その中でも特に以下のものが便利だと感じましたのでご紹介します。
Hash#dig, Array#dig
入れ子になったHashやArrayから、深い場所にある値を取り出すメソッドです。 次のように利用します。
{a: {b: {c: :d}}}[:a][:b][:c] #=> :d
{a: {b: {c: :d}}}.dig(:a, :b, :c) #=> :d
#[]を使った値の取り出しと#digの利用の違いは、#digの場合には途中に値が存在しない場合に例外を発生させず、代わりにnilを返すことです。
{a: {b: {c: :d}}}[:a][:unknown_key][:c] #=> NoMethodErrorが発生
{a: {b: {c: :d}}}.dig(:a, :unknown_key, :c) #=> nil
深い位置にある値を取り出したいが、途中の要素が値を持たない可能性があるとき、#digを利用すると便利です。 存在チェックの処理を省いて、すっきりとコーディングできるようになります。
上の例ではHashが入れ子になったものに対して#digを使ってみましたが、ArrayやHashのような"コンテナ"以外のインスタンス(例えばFixnumクラスのインスタンス)に対して#digを呼び出すとTypeErrorが発生します。 これによって、
•コンテナがnilを返した場合
•コンテナ以外のレシーバに対して#digを呼び出した場合
を区別できます。
この続きは以下をご覧ください
http://www.school.ctc-g.co.jp/columns/masuidrive/masuidrive25.html
ソーシャルもやってます!