Ruby
Rails

defind?を三項演算子で使うときに注意すべきこと

変数が定義されているか確認する defined?を利用した際、思わぬ挙動をしたのでメモ。

事象

以下は期待通りの挙動ですが、

defined? a # => nil

三項演算子を利用したときに、expressionが返却されてしまいました。

defined? a ? a : nil # => "expression"

原因:カッコ省略でメソッド適用範囲が意図と違ってしまった

原因はカッコを省略したことにより、defined?が意図しない範囲にかかってしまったためでした。

defined? a ? a : nil # => "expression"

defined?(a ? a : nil) # => "expression"

defined?(a) ? a : nil # => nil

結論:defined?を三項演算子で使うときはカッコを省略しない

defined?に限らず、カッコを省略した場合の挙動をきちんと理解して利用しないといけないですね。

defined?(a) ? a : nil # => nil

参考記事