論理値/真偽値のデータ型の各プログラミング言語別の概要
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 を表す値としては ''
を使うことが多い。