LoginSignup
0
0

More than 3 years have passed since last update.

[考えてみた]セッション変数から素直?に値を取り出したい

Last updated at Posted at 2019-07-08

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)

すれば、取れるようです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0