Just do IT

思うは招く

Ruby でびっくりマークが2つ出てくるアレの意味

Ruby のコードを見ているとよく出てくる!!のやつ。

def user_exists?
  !!find_user
end

呼び方としては、

  • エスクペラメーションマーク
  • double-bang
  • 二重否定

などがあるみたい。

意味

「true か false を返すメソッドをつくりたい」という場合はよくある。そんな場合、!!を使うことで確実にtrueかfalseを返せるということ。メソッドの結果を真偽値化している、みたいな感じか。

def user_exists?
  !!find_user
end

上記コードの場合、find_user というオブジェクトがあるかどうかを調べたい。

たとえば、!をひとつだけにしてしまうとどうなるか。

def user_exists?
  !find_user
end
  • find_userが true の場合、!をすることで false になってしまう
  • find_userが存在するのに、false が返ってきてしまうので、ユーザーが exist しないことになってしまう

Rubyの否定演算子2つ重ね「!!」(double-bang)でtrue/falseを返す|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

ちなみに、!!PHPJavaScriptでも存在するようです。