(2022.12.6追記)
記事本体より @jnchito さんのコメントの方が参考になりますので、そちらもご覧ください。
(2022.12.6追記終わり)
変数にオブジェクトまたは nil が入ってる場合、ぼっち演算子(Safe Navigation Operator)を使うと安全にメソッドを呼び出せます。
irb(main):017:0> str = "abc"
irb(main):018:0> str.size
=> 3
irb(main):019:0> str = nil
irb(main):020:0> str.size
Traceback (most recent call last):
4: from /usr/bin/irb:23:in `<main>'
3: from /usr/bin/irb:23:in `load'
2: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
1: from (irb):20
NoMethodError (undefined method `size' for nil:NilClass)
irb(main):021:0> str&.size
=> nil
こんな感じでハッシュに対して nil 安全にアクセス出来ないか考えてみました。
irb(main):023:0> hash = {a: 1, b: 2}
irb(main):024:0> hash[:a]
=> 1
irb(main):025:0> hash = nil
irb(main):026:0> hash[:a]
Traceback (most recent call last):
4: from /usr/bin/irb:23:in `<main>'
3: from /usr/bin/irb:23:in `load'
2: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
1: from (irb):26
NoMethodError (undefined method `[]' for nil:NilClass)
nil は Ruby では false 扱いですから三項演算子を使えばいけます。
irb(main):027:0> hash ? hash[:a] : nil
=> nil
||
で空ハッシュを返してやってもいけます。
irb(main):028:0> (hash || {})[:a]
=> nil
https://qiita.com/YumaInaura/items/eb45d79319aeb6c19d46 によると、ぼっち演算子で []
メソッドを呼んでやればうまくいくと。説明されたら理屈は分かりますが、いきなりこのコード見せられたら私は読める自信がありません。
irb(main):029:0> hash&.[](:a)
=> nil
dig
使えばうまくいきました。個人的にはこれが一番読みやすいですかねぇ。
irb(main):030:0> hash&.dig(:a)
=> nil