これまで「true」と「真」、「false」と「偽」を特に区別せずに使うことが多かったが、たまにモヤモヤすることがあった。テストを書き始めてそこら辺が気になってきたので、この機会にはっきりさせてみることにした。
結論から言うとこういうこと(注:Ruby の話です)。
日本語では true そのものを「true」、広い意味の true を「真」と言い分けられるけど、英語だと 真は true、偽は false だから結局文脈によるのか。 pic.twitter.com/HVr4yVvO2S
— masuyama13 (@masuyama_13) 2020年8月11日
2通りの解釈
「true」と書かれているとき、2通りの解釈がある。
true
そのもの- 真偽判定で
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
andfalse
are false-values andtrue
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
これらの制御式のテストでは、nil
と false
は偽(false-values)であり、true
とその他のオブジェクトは真(true-values)である。このドキュメントでは、“true” は 「真(“true-value”)」を意味し、“false” は「偽(“false-value”)」を意味する。
ここで 真 = true 、偽 = false に戻ってきてしまった。
まとめ
一般的な話として、真 = true 、偽 = false は間違っていない。
英語では、Ruby に関して、真 = true 、偽 = false 。
日本語では、Ruby に関して、「真」と「true」、「偽」と「false」を以下のように区別している。
ブログなどでは、「真」と「true」、「偽」と「false」を区別している人と、区別していない人がいる。