0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Ruby の真/偽と true/false は違う

Qiita の Ruby の初心者向け記事で,true/false に関して,誤ったもしくは誤解を招く表現を非常によく目にします。
たとえば

if は条件が true のときに・・・を実行し,false のときは実行しません

とか

Ruby では nil と false だけが false で,それ以外のオブジェクトは true です。

といったような。
明らかに 真/偽 と true/false を混同しています。

「えっ? 日本語と英語だけの違いじゃないの?」って?
ハイ,確かに単語の一般的意味として,真=true,偽=false という対応はあります。
しかし,Ruby について日本語で書かれた文章に「true」「false」とあったら,それは「真」「偽」という意味ではなく,次に述べるある特定のオブジェクトを指しています1

Ruby の true は,TrueClass というクラスのインスタンスです2
同様に falseFalseClass というクラスのインスタンスです。

えっと,厳密にいえば,true という識別子は「擬似変数」と呼ばれるものであって,この擬似変数が指しているオブジェクトが TrueClass のインスタンスです。
これを「trueTrueClass のインスタンス」と縮めてもとくに誤解の余地はないので,しばしばそう表現されます。

一方,Ruby ではどんなオブジェクトも真偽値として使うことができます。
そのルールは極めて単純で,nilfalse だけが偽であり,他のどんなオブジェクトも真である,というものです。
ですから,

if "hoge"
  puts "いえーい"
end

いえーい を表示します。

ではどうして truefalse があるかというと,これらはそれぞれ「真の代表値」「偽の代表値」であると考えればいいでしょう。

なお,さきほど「真偽値」という言葉を使いました。
この記事では,真偽性を利用する値という意味で使っています。平たく言うと,条件式の値のことですね。
しかし,人によっては「真偽値」を「true または false」という意味で使っていることもあるので気をつけてください。


  1. 当然「英語ではどうなんだよ」という疑問が涌きますが,この記事でいう真/偽に当たる言葉として,いちおう truthy/falsy があります。JavaScript 方面ではそこそこ使われているようです。 

  2. TrueClass はインスタンスをただ一つしか持てないことが保証されています。それが true です。FalseClassfalse の関係も同様。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?