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株式会社
ちなみに、!!
はPHPやJavaScriptでも存在するようです。