0
0

論理否定の`!`と`nil?`メソッドを組み合わして使った際のメモ

Posted at

やろうとしたこと

  • 条件分岐をさせるにあたって boolean で結果を取得したかった
  • 「オブジェクトが nil なら false を返してほしい」という目的
    • nil?は「nil なら true を返す」ので論理否定と組み合わせた

▲しかし、論理否定!をとnil?を組み合わせて使うと自分が想定している結果が返ってこない

以下にサンプルを示す

ソースコード
p ("aaa")
p !("aaa")
p (nil)
p !(nil)
p ("----------")
p ("aaa").nil?     #【1】
p !("aaa").nil?    #【2】
p !(("aaa").nil?)  #【3】
p ("##########")
p (nil).nil?       #【4】
p !(nil).nil?      #【5】
p !((nil).nil?)    #【6】
実行結果
"aaa"
false
"----------"
false   #【1】
true    #【2】
true    #【3】
"##########"
true    #【4】
false   #【5】
false   #【6】

何が想定外と感じたか

  • 【5】【6】の処理結果は異なると思っていた
    ⇒【5】は false になると思っていた
    • 【5】について
      nilという値がある」という状態なのだから「(nil)はtrue」と思っていた

nilは「false」であるという原理原則を理解していなかった

原理原則として以下が存在する

  1. true は「真」
  2. falsenil 以外はすべて「真」
  3. falsenil は「偽」

(引用 : https://www.javadrive.jp/ruby/if/index2.html

他メモ

  • 今回、自分は Rails で開発していたのだから他のメソッドに頼ればよかった
    • present?を使えば論理否定を使わなくて済んだはず
      そっちの方が直感的で分かりやすい

0
0
0

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