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」という意味で使っていることもあるので気をつけてください。