C言語、アセンブラあたりから学んだコンピュータ言語なんですが、
今更ながら、当たり前だと思っていた、「真」「偽」の定義が、昨今の高級言語の登場で、異なった定義もでてきたようです。
そこで、調べていたのですが、ちゃっかりと、しかも、ほぼ、同時期に同じ思いをした人がいたようで、まとめページがありましたのでそちらを紹介します。
http://d.hatena.ne.jp/mirakui/20090604/truefalse
(mirakuiさんのブログ「床のトルストイ、ゲイとするとのこと」より)
- C言語
C言語には bool 型が無い。0 (int)だけが偽となり、それ以外はすべて真となる。
C++
C++になると bool 型が出てくる。C と同様に、 0 が偽でそれ以外が真となるが、bool 型リテラル false は 0 として評価されるため、偽となる。0 (int) false が偽となり、それ以外が真となる。
Java
false のみが偽となり、true のみが真となる。Javaではこれら以外の値が真偽値に暗黙的に変換されたりはしない。
JavaScript (ECMA-262)
false(偽)になるものは下記のみ。
false
undefined
null
+0,
-0,
NaN
"" (空文字)
これら以外は真として扱われる。Objectは全部真になる。なので空配列なども真。
Ruby
Ruby はシンプル。false nil の二つ以外はすべて真として扱われる。
Ruby の面白いのは、Boolean というクラスは無く、 true と false はそれぞれ TrueClass と FalseClass というクラスのインスタンスである。
PHP
PHP は複雑。以下のものが偽となり、これら以外はすべて真となる。(PHP: 論理型 (boolean) - Manualから抜粋)
boolean の FALSE
integer の 0 (ゼロ)
float の 0.0 (ゼロ)
空の文字列、 および文字列の "0"
要素の数がゼロである 配列
メンバ変数の数がゼロである オブジェクト (PHP 4のみ)
特別な値 NULL (値がセットされていない変数を含む)
空のタグから作成された SimpleXML オブジェクト

コメントする