digメソッド
ネストした(入子状態)ハッシュから
・安全に値を取り出したい
・値があるか、nilかどうかを確認したい
といったシーンで使える便利なメソッドです。
参考例
member1 = {
name: {
number: {
position: 'Center Fielder'
}
}
}
上記のようなハッシュから、positionの値を取り出したい場合、digを使わなければ以下のようになります。
member1[:name][:number][:position]
=> "Center Fielder"
member2 = {
name: {
}
}
しかし、上記のようにnumberもpositionも入っていないデータがある場合に、先ほどと同じ方法で確かめると、以下のようなエラーが起こります。
member2[:name][:number][:position]
NoMethodError: undefined method `[]' for nil:NilClass
member2[:name][:number]
=> nil
理由としてはnumberはnilになっているので、positionは呼び出せません。
ただし、ここでdigを使うと、情報が入っていなくてもnilが返ってきます。
digを使う場合は、以下のように()を使って記述します。
member1.dig(:name, :number, :position)
=> "Center Fielder"
member2.dig(:name, :number, :position)
=> nil
このように、値がnilか確認したい場合は、便利なdegメソッドを使いましょう。