論理値/真偽値のデータ型の各プログラミング言語別の概要
C言語 2016/06/21
論理値の型はなく、true, false というキーワードもない。
if文などの条件式には、
NULL, 0, 0.0, '\x00' が入ると false の扱いになり、それ以外は true の扱いになる。
C++ 2015/02/14
boolという型があり、true, falseというbool型の値を表すキーワードがある。
if文などの条件式には、bool型のfalseの他にC言語と同様に
NULL, 0, 0.0, '\x00' が入るとfalseの扱いになり、それ以外は true の扱いになる。
Go言語 (golang) 2015/06/08
boolという型があり、true, falseというbool型の定数を表す事前宣言済み識別子がある。
Java 2016/06/21
booleanというプリミティブ型があり、true, false というboolean型の値を表すキーワードがある。このプリミティブ型に対応するクラスは java.lang.Boolean である。
boolean型とjava.lang.Boolean型以外を
if文などの条件式として入れるとコンパイルエラーになる。
Scala 2015/02/27
Javaのbooleanに対応するScalaのクラスはscala.Booleanである。
scala._はデフォルトでインポートされているので、単にBooleanと書くだけで良い。
java.lang.Booleanとは別物だが、たぶん必要なところでは自動で変換されているのか、自分は違いを意識したことはない。
java.lang.Booleanと違って、JVM上ではscala.Booleanはそういうクラスのインスタンスではなく、
Javaのプリミティブ型booleanになっていているのではないか、と思っている。
値を表すにはJavaと同じく、true, false というキーワードを使う。
PHP 2014/12/20
論理型があり、TRUE, FALSE というキーワードがある。
NULLと同じく大文字小文字が区別されない。
if文の条件式など、論理値が必要な箇所に
FALSE, null, 0, 0.0, '', '0', array() があると FALSE の扱いになり、それ以外は TRUE の扱いになる。文字列 '0' は FALSE だが、文字列 'FALSE' や '0.0' は TRUE になる。
型の比較表 | PHP Manual
http://php.net/manual/ja/types.comparisons.php
// 以下は OK と表示される
if (TRUE == 1) {
echo "OK\n";
} else {
echo "NG\n";
}
// 以下は OK と表示される
if (TRUE == 2) {
echo "OK\n";
} else {
echo "NG\n";
}
// 以下は OK と表示される
if (FALSE == 0) {
echo "OK\n";
} else {
echo "NG\n";
}
// 以下は OK と表示される
if (FALSE == '') {
echo "OK\n";
} else {
echo "NG\n";
}
Python 2016/06/21
bool という型があり、True, False という組み込みの定数がある。
if文の条件式など、論理値が必要な箇所に
False, None, [], (), {}, "", 0, 0L, 0.0, 0j があると
False の扱いになる。その他に nonzero() や len() メソッドがあるオブジェクトで
False や 0 を返すものも False の扱いになる。それ以外は True とみなされる。
実は True は 1 と同じで、False は 0 と同じらしい。
# 以下実行例は Python2 でも Python3 でも同じ
if (True == 1):
print("OK")
else:
print("NG")
# => OK と表示される
if (False == 0):
print("OK")
else:
print("NG")
# => OK と表示される
if (True == 2):
print("OK")
else:
print("NG")
# => NG と表示される
print(isinstance(False, bool)) # True
print(isinstance(True, bool)) # True
print(isinstance(False, int)) # True
print(isinstance(True, int)) # True
Ruby 2016/06/21
true, false というキーワードがあり、それぞれ、TrueClass, FalseClass の唯一のインスタンスである。
if文の条件式など、論理値が必要な箇所に
false, nil が入ると false の扱いになり、それ以外はすべて true の扱いになる。
0 も '' も [] も true。
TrueClass, FalseClass の共通のスーパークラスとして
BooleanClass みたいなのがあるわけではない。その理由は以下の記事で解説されている。
RubyでBoolClassではなくTrueClass/FalseClassな理由を理解する | Qiita
http://qiita.com/yatemmma/items/3597a0e20556fb846d3f
JRuby 2014/12/13
Rubyと同じ仕様で、true, false というキーワードがある。
Javaのライブラリに論理値を渡すときにはRubyの論理値から暗黙のうちにJavaの boolean または java.lang.Boolean に変換してくれるみたい。
逆にJavaのライブラリから文字列を受け取るときには boolean または java.lang.Boolean から暗黙のうちにRubyの論理値に変換してくれる。
Perl 2016/06/21
論理値の型はなく、true, false というキーワードもない。
if文の条件式など、論理値が必要な箇所に
0, '0', '', undef, () が入ると false の扱いになり、それ以外は true の扱いになる。ただし、true を表す値としては 1 を使うことが多く、
false を表す値としては '' を使うことが多い。