ブーリアン型

ブーリアン型とは



ブーリアン型(Boolean datatype)は、プログラミングにおいて真偽値を表現するための基本的なデータ型です。一般的に「真(true)」と「偽(false)」の2つの値のみを持ちます。ブーリアン、ブール型、論理型とも呼ばれます。ブーリアン型は、条件分岐や論理演算など、プログラムの制御フローにおいて重要な役割を果たします。

ブーリアン型の特性



ブーリアン型は、2つの値を持つ列挙型と見なすこともできますし、2進数1桁(1ビット)の整数型と考えることも可能です。また、ブール代数に基づいた様々な論理演算が可能です。

主な論理演算には、以下のようなものがあります。

論理積 (AND): 両方の値が真の場合に真
論理和 (OR): どちらか一方の値が真の場合に真
排他的論理和 (XOR): どちらか一方のみが真の場合に真
同値 (EQV): 両方の値が等しい場合に真
同値 (NEQV): 両方の値が異なる場合に真
否定 (NOT): 値が真の場合は偽、偽の場合は真

これらの演算は、プログラミングにおける条件判断やデータ操作に広く利用されています。

各プログラミング言語でのブーリアン型



ブーリアン型は多くのプログラミング言語で標準的にサポートされていますが、実装方法や挙動にはいくつかの違いが見られます。以下にいくつかの主要な言語でのブーリアン型の扱いについて解説します。

Ada



Adaでは、`Boolean`型は`Standard`パッケージで定義された列挙型であり、`False`と`True`の2つの値をとります。`False < True`という順序関係も定義されています。比較演算子や論理演算子も定義されており、ブーリアンの配列にも適用可能です。

ALGOL



ALGOL 60では`Boolean`型がデータ型として定義され、演算子も定義されています。ALGOL 68では`bool`に短縮されました。

C言語



C言語の初期の規格では、ブーリアン型は存在せず、`int`型で代用されることが一般的でした。`0`が偽、それ以外が真と扱われます。ただし、論理否定演算子`!`の結果は真を表す`1`になります。

C99規格では、`_Bool`型が追加され、``ヘッダファイルで`bool`、`false`、`true`というシンボルが定義されました。列挙型やプリプロセッサマクロで定義する方法も一般的ですが、C99以降は標準で定義されたものを使うのが推奨されています。

C++



C++では、`bool`型が基本データ型としてサポートされ、`true`と`false`がキーワードとして導入されました。`vector`はビット単位で格納される特殊なクラスですが、STLコンテナの制約に完全に合致しないという特徴があります。

C#



C#では、ブーリアン型は`bool`であり、.NETの`System.Boolean`型のエイリアスです。

Dart



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



Haskellでは、`data Bool = False | True`のように定義され、型クラスのインスタンス型です。`not`、`&&`、`||`などの関数と演算子があります。

Java



Javaでは、ブーリアン型はプリミティブ型`boolean`であり、整数型との暗黙の型変換はありません。`if`文などの条件式には`boolean`型のみが許容されます。ブーリアンのプリミティブラッパークラスは`Boolean`です。

JavaScript



JavaScriptでは、`Boolean`型があり、真偽値は`true`と`false`です。比較演算の結果は`Boolean`の値になりますが、論理演算子は引数を短絡評価し、引数の値を返します。真偽値が必要な文脈では、truthyとfalsyの概念があり、`false`、`undefined`、`null`、`0`、`NaN`、空文字列などがfalsyとされます。

Scheme



Schemeでは、真偽値は`#t`と`#f`で、`#f`以外は真として扱われます。

ML



MLには、`bool`型があり、`true`と`false`の値をとります。

OCaml



OCamlも`bool`型を持ち、値として`true`と`false`をとります。

Pascal



Pascalでは、`Boolean`が基本データ型として提供されています。

Perl



Perlでは、数や文字列には区別がなく、ブール演算では、要素を持たない集合型、空文字列、`0`と等しい数値、未定義変数が偽と解釈されます。

Python



Pythonでは、`0`、`None`、`False`、空のコンテナ型などが偽として扱われ、それ以外は真として扱われます。`False`と`True`は定数として定義されており、`bool`型も存在します。

PHP



PHPでは、`TRUE`と`FALSE`が定義され、`0`、`NULL`、空文字列などが`FALSE`とみなされます。

Ruby



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)`のような記述は冗長で、混乱の原因になることがあります。

ブーリアン型は、プログラミングにおいて基本的な概念であるため、各言語の仕様を理解し、適切に活用することが重要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。