エクスクラメーションマークの重ねがけ、二重のビックリマークなど、読み方が難しいやつ
環境
$ ruby -v ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]
効能
明確に true
か false
にしたいシーンがあるときに !
をかけてtrueかfalseにしてからさらにもう一回 !
をかけると、明確にtrueかfalseか表現することができる
x = 1 puts !!x true
そのため、オブジェクトの存在チェックをする場合は !!
をすると有効
余談:真と偽になるパターンに関して
基本Rubyの世界では false
と nil
以外は真で評価をされる
false は nil オブジェクトとともに偽を表し、その他の全てのオブジェクトは真です。 - class FalseClass (Ruby 2.7.0 リファレンスマニュアル)
そのため下記のようなif文は成立する
x = 1 puts 2 if x 2 x = nil puts 2 if x # 何も出ない
このようなことがあるため !!hoge
を能動的に使いたくなる場面は、?
をつけるようなクラスを提供する時が多いかと思われる
読み方
英語圏では !
を bangと読むことがあるらしく、double-bangと読む読み方があるとのこと。