nilか?明示的に調べる方法
こんな感じの実装を見かけることがあります。
session[:hoge] == nil
だったときに備えているわけです。
if session[:hoge]
fuga = session[:hoge][:fuga]
piyo = session[:hoge][:piyo]
end
しかし、ifを読むと、ビジネスロジック的になにか意味があるのかな?と思えてしまうので、プログラムの都合のifはなるべく減らして、なるべくビジネスロジックだけに集中した書き方をしたいです。
nilか?を暗黙のうちに済ます方法
rubyにはぼっち演算子(&.
)というレシーバがnilのときはnilを返してくれる演算子があります。素直か?というと少し微妙かもしれませんが、
Hash#digを使うことで、ifを減らしてロジックな素直に書くことができそうです。
fuga = session.dig(:hoge,:fuga)
piyo = session.dig(:hoge,:piyo)
(追記)
文字列とシンボルで明確にしていしないと、nilとなってしまう場合があります。
その場合は、 with_indifferent_access
を途中に入れるか、
fuga = session.with_indifferent_access.dig(:hoge,:fuga)
piyo = session.with_indifferent_access.dig(:hoge,:piyo)
しっかり指定するか
fuga = session.dig('hoge',:fuga)
piyo = session.dig('hoge',:piyo)
すれば、取れるようです。