Ruby 「true」と「真」、「false」と「偽」の違いを考える

これまで「true」と「真」、「false」と「偽」を特に区別せずに使うことが多かったが、たまにモヤモヤすることがあった。テストを書き始めてそこら辺が気になってきたので、この機会にはっきりさせてみることにした。

結論から言うとこういうこと(注:Ruby の話です)。

2通りの解釈

「true」と書かれているとき、2通りの解釈がある。

  1. trueそのもの
  2. 真偽判定でtrueになるもの

真偽判定でtrueになるもののことを、日本語では「真」という。

trueそのもののことも、日本語で言うなら「真」となる。

Wikipedia を見てみよう。

ブーリアン型(ブーリアンがた、英: Boolean datatype)は、真理値の「真 = true」と「偽 = false」という2値をとるデータ型である。
ブーリアン型 - Wikipedia

Wikipedia では Ruby にはブーリアン型に相当するクラスがないということを含め言及はあるのだが、一般的な話で言うと、真 = true偽 = false である。

Ruby では「真/偽」と「true / false」を使い分けることが多い

少なくとも Ruby においては、真偽判定でtrueになるもののことを「真」、trueそのもののことをtrueと区別することが多いようだ。

Ruby リファレンスマニュアル

class TrueClass
true のクラス。 true は TrueClass クラスの唯一のインスタンスです。 true は真を表す代表のオブジェクトです。
class TrueClass (Ruby 2.7.0 リファレンスマニュアル)

class FalseClass
false のクラス。 false は FalseClass クラスの唯一のインスタンスです。 false は nil オブジェクトとともに偽を表し、その他の全てのオブジェクトは真です。
class FalseClass (Ruby 2.7.0 リファレンスマニュアル)

if
条件式を評価した結果が真である時、then 以下の式を評価します。 if の条件式が偽であれば elsif の条件を評価します。 elsif 節は複数指定でき、全ての if および elsif の条件式が偽であったとき else 節があればその式が評価されます。
制御構造 (Ruby 2.7.0 リファレンスマニュアル)

その他の参考資料

Ruby コミッタである卜部昌平さんの言葉

if文の中に書いたときにelseの方に行くという現象、これはfalseとは別の名前で呼びたいので、日本語の『偽』という言葉を使いましょう。 
そうすると、nilは偽です。
Rubyのtrueとfalseの話 - Qiita

チェリー本(プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus)の著者である伊藤淳一さんのブログ

nilとfalseだけが偽で、それ以外は真
ブログに技術書の内容を丸写しする問題点と、オリジナルなコンテンツを書くためのアイデア - give IT a try

(本の中でも区別した書き方になっている)

英語版ドキュメント

一方、英語版のドキュメントの制御構造(if など)のページにはこうある。DeepL 翻訳さんに手伝ってもらって訳してみる。

For the tests in these control expressions, nil and false are false-values and true and any other object are true-values. In this document “true” will mean “true-value” and “false” will mean “false-value”.
control_expressions - Documentation for Ruby 2.7.0

これらの制御式のテストでは、nilfalse は偽(false-values)であり、true とその他のオブジェクトは真(true-values)である。このドキュメントでは、“true” は 「真(“true-value”)」を意味し、“false” は「偽(“false-value”)」を意味する。

ここで 真 = true偽 = false に戻ってきてしまった。

まとめ

一般的な話として、真 = true偽 = false は間違っていない。

英語では、Ruby に関して、真 = true偽 = false

日本語では、Ruby に関して、「真」と「true」、「偽」と「false」を以下のように区別している。

f:id:masuyama13:20200812235739p:plain

ブログなどでは、「真」と「true」、「偽」と「false」を区別している人と、区別していない人がいる。