Qiita の Ruby の初心者向け記事で,true
/false
に関して,誤ったもしくは誤解を招く表現を非常によく目にします。
たとえば
if は条件が true のときに・・・を実行し,false のときは実行しません
とか
Ruby では nil と false だけが false で,それ以外のオブジェクトは true です。
といったような。
明らかに 真/偽 と true
/false
を混同しています。
「えっ? 日本語と英語だけの違いじゃないの?」って?
ハイ,確かに単語の一般的意味として,真=true,偽=false という対応はあります。
しかし,Ruby について日本語で書かれた文章に「true」「false」とあったら,それは「真」「偽」という意味ではなく,次に述べるある特定のオブジェクトを指しています1。
Ruby の true
は,TrueClass
というクラスのインスタンスです2。
同様に false
は FalseClass
というクラスのインスタンスです。
えっと,厳密にいえば,true
という識別子は「擬似変数」と呼ばれるものであって,この擬似変数が指しているオブジェクトが TrueClass
のインスタンスです。
これを「true
は TrueClass
のインスタンス」と縮めてもとくに誤解の余地はないので,しばしばそう表現されます。
一方,Ruby ではどんなオブジェクトも真偽値として使うことができます。
そのルールは極めて単純で,nil
と false
だけが偽であり,他のどんなオブジェクトも真である,というものです。
ですから,
if "hoge"
puts "いえーい"
end
は いえーい
を表示します。
ではどうして true
や false
があるかというと,これらはそれぞれ「真の代表値」「偽の代表値」であると考えればいいでしょう。
なお,さきほど「真偽値」という言葉を使いました。
この記事では,真偽性を利用する値という意味で使っています。平たく言うと,条件式の値のことですね。
しかし,人によっては「真偽値」を「true
または false
」という意味で使っていることもあるので気をつけてください。