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つ / 否定の否定)
とかかなぁ。