ブーリアン型とは
ブーリアン型(Boolean datatype)は、プログラミングにおいて真偽値を表現するための基本的な
データ型です。一般的に「真(true)」と「偽(false)」の2つの値のみを持ちます。ブーリアン、ブール型、論理型とも呼ばれます。ブーリアン型は、条件分岐や論理演算など、プログラムの制御フローにおいて重要な役割を果たします。
ブーリアン型の特性
ブーリアン型は、2つの値を持つ列挙型と見なすこともできますし、2進数1桁(1
ビット)の
整数型と考えることも可能です。また、
ブール代数に基づいた様々な論理演算が可能です。
主な論理演算には、以下のようなものがあります。
論理積 (AND): 両方の値が真の場合に真
論理和 (OR): どちらか一方の値が真の場合に真
排他的論理和 (XOR): どちらか一方のみが真の場合に真
同値 (EQV): 両方の値が等しい場合に真
非同値 (NEQV): 両方の値が異なる場合に真
否定 (NOT): 値が真の場合は偽、偽の場合は真
これらの演算は、プログラミングにおける条件判断やデータ操作に広く利用されています。
各プログラミング言語でのブーリアン型
ブーリアン型は多くのプログラミング言語で標準的にサポートされていますが、実装方法や挙動にはいくつかの違いが見られます。以下にいくつかの主要な言語でのブーリアン型の扱いについて解説します。
Adaでは、`Boolean`型は`Standard`パッケージで定義された列挙型であり、`False`と`True`の2つの値をとります。`False < True`という順序関係も定義されています。比較演算子や論理演算子も定義されており、ブーリアンの
配列にも適用可能です。
ALGOL 6
0では`Boolean`型が
データ型として定義され、演算子も定義されています。
ALGOL 68では`bool`に短縮されました。
C言語の初期の規格では、ブーリアン型は存在せず、`int`型で代用されることが一般的でした。`
0`が偽、それ以外が真と扱われます。ただし、論理
否定演算子`!`の結果は真を表す`1`になります。
C99規格では、`_Bool`型が追加され、`
`ヘッダファイルで`bool`、`false`、`true`というシンボルが定義されました。列挙型やプリプロセッサマクロで定義する方法も一般的ですが、C99以降は標準で定義されたものを使うのが推奨されています。
C++では、`bool`型が基本データ型としてサポートされ、`true`と`false`がキーワードとして導入されました。`vector`はビット単位で格納される特殊なクラスですが、STLコンテナの制約に完全に合致しないという特徴があります。
C#
C#では、ブーリアン型は`bool`であり、.NETの`System.Boolean`型のエイリアスです。
Dartでは、`dart:core`ライブラリに`bool`クラスがあり、真偽値は`true`と`false`です。`true`以外は全て偽とみなされます。
ECMAScript
ECMAScript(JavaScript)では、`Boolean`型があり、`true`と`false`が真偽値です。論理演算では、引数の値に応じて短絡評価を行い、どちらかの引数の値を返します。真偽値が必要な文脈では、truthy(真値っぽい)とfalsy(偽値っぽい)という概念があり、falsyな値は`false`、`undefined`、`null`、`0`、`NaN`、空文字列などです。
FORTRAN
FORTRANでは、`LOGICAL`キーワードと`.NOT.`、`.AND.`、`.OR.`などの演算子が早くから導入されました。
Haskellでは、`data Bool = False | True`のように定義され、型クラスのインスタンス型です。`not`、`&&`、`||`などの関数と演算子があります。
Javaでは、ブーリアン型はプリミティブ型`boolean`であり、整数型との暗黙の型変換はありません。`if`文などの条件式には`boolean`型のみが許容されます。ブーリアンのプリミティブラッパークラスは`Boolean`です。
JavaScriptでは、`Boolean`型があり、真偽値は`true`と`false`です。比較演算の結果は`Boolean`の値になりますが、論理演算子は引数を短絡評価し、引数の値を返します。真偽値が必要な文脈では、truthyとfalsyの概念があり、`false`、`undefined`、`null`、`0`、`NaN`、空文字列などがfalsyとされます。
Schemeでは、真偽値は`#t`と`#f`で、`#f`以外は真として扱われます。
ML
MLには、`bool`型があり、`true`と`false`の値をとります。
OCamlも`bool`型を持ち、値として`true`と`false`をとります。
Pascalでは、`Boolean`が基本データ型として提供されています。
Perlでは、数や文字列には区別がなく、ブール演算では、要素を持たない集合型、空文字列、`0`と等しい数値、未定義変数が偽と解釈されます。
Pythonでは、`0`、`None`、`False`、空のコンテナ型などが偽として扱われ、それ以外は真として扱われます。`False`と`True`は定数として定義されており、`bool`型も存在します。
PHP
PHPでは、`TRUE`と`FALSE`が定義され、`0`、`NULL`、空文字列などが`FALSE`とみなされます。
Rubyでは、ブーリアン型に相当するクラスはなく、`false`は`FalseClass`、`true`は`TrueClass`のインスタンスです。`false`と`nil`以外は全て真として扱われます。
Smalltalk
Smalltalkでは、`true`は`True`クラスのオブジェクト、`false`は`False`クラスのオブジェクトで、それぞれ`Boolean`クラスを継承しています。`if`文の代わりに、クラスのメソッドによる分岐を実現しています。
Visual Basic
Visual Basicには、`Boolean`型があり、比較演算の結果はこの型となります。値は`True`(-1)と`False`(0)のみです。
VB.NET
VB.NETでは、`Boolean`型は`System.Boolean`のエイリアスですが、組み込み関数や互換メソッドを使う場合は、VBと類似した振る舞いをします。
ブーリアン型の注意点
言語によって真偽値の扱いが異なるため、移植性や相互運用性に注意が必要です。
C言語のように、`0`が偽、それ以外が真というルールは、他の言語でも同様とは限りません。ステータスコードやエラーコードでは、真偽の解釈が逆になる場合もあります。
JavaScriptなどの言語では、truthy/falsyの概念を理解し、意図しない挙動を避ける必要があります。
比較演算子の結果とブーリアン値を混同しないように注意が必要です。例えば、`if (cond == TRUE)`のような記述は冗長で、混乱の原因になることがあります。
ブーリアン型は、プログラミングにおいて基本的な概念であるため、各言語の仕様を理解し、適切に活用することが重要です。