エクスクラメーションマークの重ねがけ、二重のビックリマークなど、読み方が難しいやつ
環境
$ 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と読む読み方があるとのこと。