ブーリアン型
ブーリアン型(ブーリアンがた、英: Boolean datatype)は、真理値の「真 = true」と「偽 = false」という2値をとるデータ型である。ブーリアン、ブール型、論理型(logical datatype)などともいう。2種類の値を持つ列挙型とも、2進で1ケタすなわち1ビットの整数型とも、見ることもできる。
また、各種ブール演算を行うことができ、論理積 (AND、&、*)、論理和 (OR、|、+)、排他的論理和 (XOR、NEQV、^)、同値 (EQV、=、==)、非同値 (NEQV、<>、!=)、否定 (NOT、~、!) などの操作が可能である。これらの演算はブール代数の演算に対応している。
キーワード LOGICAL と演算子 .NOT.、.AND.、.OR. などが1950年代に導入された。これはFORTRANが標準化される以前のことである。
Dartでは、dart:core ライブラリに bool クラスがあり、true と false がそれの真偽値(とそのリテラル)である。(「他の多くの値は真として扱われる」という、他の多くの言語と違い)true 以外は全て偽として扱われる。さらに checked mode では、if文など真偽値が必要とされる場所では型チェックがされるため、他の型の値であった場合は型チェックでエラーになる。
SmalltalkではtrueはTrueクラスのオブジェクト、falseはFalseクラスのオブジェクトで、TrueクラスとFalseクラスはそれぞれBooleanクラスを継承したクラスになっている。Smalltalkには言語機能としてif文にあたる構文が無くTrueクラスとFalseクラスの違いによって分岐を実現している。
上記はif文にあたる分岐の例でtrueに分岐用のメッセージを送っているため前者のブロックを評価しvalueに1を代入している。 メッセージ送信側だけでは他の言語におけるif文の糖衣構文にしか見えないが書き方はSmalltalkにおける一般的なメッセージ式に過ぎず、クラスにも下記のようにメッセージに対応するメソッドが存在する。
Smalltalkにおけるブール値はこのような構造になっているため、原則として他の言語の様に数値との相互変換が存在しない。ただし、#ifTrue:ifFalse:を実装したオブジェクトとの互換性を持つ。ただし処理系によっては性能維持のため#ifTrue:ifFalse:の引数にブロック指定した場合はtrueかfalseでなければ例外を出すなど互換性が若干制限されている場合もある。 また、Smalltalkではnilも同様に分岐として振る舞うことができ、nilと組み合わせることで3値論理として使うこともできる。