Murayama blog.

it works.

double exclamation

週末の昼下がりに、
Railsのガイドを読んでたら、以下のようなコードに遭遇したのでメモしておきます。

def logged_in? 
    !!current_user
end 


気になったのは、エクスクラメーションマークが2つ付くところです。
通常、!(エクスクラメーションマーク1つ)の場合は否定(Not)になります。
じゃー、!!(エクスクラメーションマーク2つ)付けるとどうなるの?
って気になったので調べてみました。


!! (The double bang / double not) in Ruby - Momoro Machine


先に結果を見た方が早いと思うので、コードも引用させてもらいます。

>> !!active
=> true

>> active = false
=> false

>> !!active
=> false

>> active = nil
=> nil

>> !!active
=> false


コードを要約すると、変数の値がnilだった場合、
「そのままnilを返却するのではなく、falseに置き換えてから返却したい」ときに!!を利用するようです。


Rubyの場合、bool値を返すメソッドは、習慣的にメソッド名の後ろに?を付けます。
このようなbool値を返すメソッドを実装する場合は、!!を利用して戻り値を作成するとよさそうです。

補足 !!の読み方

!!の読み方がイマイチわからなくて検索に苦労しました。
上記の参考にさせてもらったサイトだと

!! (aka double bang / double not / double exclamation)

と紹介していました。aka はas known as(別名)って意味らしい。
個人的には、、
!! (aka ビックリ2つ / Not2つ / Not演算子2つ / 否定の否定)
とかかなぁ。