コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyにおける ! を二重にした !! の使い所

エクスクラメーションマークの重ねがけ、二重のビックリマークなど、読み方が難しいやつ

環境

$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

効能

明確に truefalse にしたいシーンがあるときに ! をかけてtrueかfalseにしてからさらにもう一回 ! をかけると、明確にtrueかfalseか表現することができる

x = 1
puts !!x
true

そのため、オブジェクトの存在チェックをする場合は !! をすると有効

余談:真と偽になるパターンに関して

基本Rubyの世界では falsenil 以外は真で評価をされる

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と読む読み方があるとのこと。

参考リンク