# Boolean

In de informatica is boolean een datatype met slechts twee mogelijke waarden, true (waar, ja) en false (onwaar, nee), bedoeld om de waarheidswaarde van logische expressies in computerprogramma's en boolealgebra's te representeren. Het type is genoemd naar George Boole, die als eerste een algebraïsch systeem voor logica ontwikkelde halverwege de 19e eeuw.

## Implementatie

In een programmeertaal met een ingebouwd datatype boolean, bijvoorbeeld in Pascal en Java, zijn vergelijkingsoperatoren als '<', '>', '≠', gewoonlijk zo gedefinieerd dat zij een boolean als waarde teruggeven. Ook zijn de voorwaarden die de control flow in een programma bepalen, zoals in voorwaardelijke statements en lussen, meestal van het type boolean.
In programmeertalen zonder een expliciet datatype boolean, zoals C en Lisp, kunnen de waarheidswaarden voorgesteld worden door een ander datatype. Lisp gebruikt een lege lijst voor "false" en elke andere waarde voor "true". C maakt gebruik van het type integer (informatica) en vat de waarde 0 op als "false" en 1 als "true". Een vergelijkingsexpressie als 'i > j' krijgt dus de waarde 1 als ze waar is en anders de waarde 0. De voorwaarden waarop getest wordt in if-, while-, for-statements, e.d., beschouwen de waarde 0 als onwaar en elke andere waarde als waar.
De meeste programmeertalen, ook die niet expliciet een datatype boolean hebben, ondersteunen logische bewerkingen, zoals logische conjunctie (AND, &, *), logische disjunctie (OR, |, +), logische equivalentie (EQV, =, ==), exclusieve disjunctie (XOR, NEQV, ^, !=), en logische negatie (NOT, ~, !).
In sommige programmeertalen, bijvoorbeeld in Ruby en Smalltalk, behoren de waarden "true" en "false" tot verschillende klassen, nl. "True" respectievelijk "False", zodat er geen enkelvoudig type boolean is.
In andere programmeertalen is het type boolean zo gedefinieerd dat het meer dan twee waarheidswaarden kan aannemen. In standaard SQL uit 1999 bijvoorbeeld kan een boolean de waarden "true", "false" en "unknown" (null) hebben, wat erg handig kan zijn bij het programmeren,

## Geschiedenis

Een van de eerste programmeertalen die expliciet over het datatype boolean beschikten, was ALGOL 60, met de waarden "true"" en "false" en logische operatoren aangeduid met de symbolen '$\wedge$' (AND), '$\vee$' (OR), '$\supset$' (implicatie), '$\equiv$' (equivalentie), en '$\neg$' (NOT). Vanwege de beperkte mogelijkheden voor het invoeren van gegevens in die tijd, gebruikten de meeste compilers alternatieve representaties, zoals AND of 'AND'. Het idee om een primitief datatype boolean in te bouwen, werd echter in veel latere talen opgenomen, o.a.in ALGOL 68 (1970), Java, en C#.
De eerste versie van FORTRAN (1957) en ook de opvolger FORTRAN II (1958) kenden geen logische waarden en bewerkingen. Zelfs de conditional IF-statement had als voorwaarde een rekenkundige expressie, en sprong, afhankelijk van het teken van deze expressie, naar een van drie locaties. FORTRAN IV (1962), echter, volgde het voorbeeld van ALGOL 60 door een boolean datatype LOGICAL beschikbaar te stellen met de waarden .TRUE. en .FALSE., boolean vergelijkingsoperatoren .EQ., .GT., etc. en de logische operatoren .NOT., .AND., .OR.. In FORMAT-statements, zorgde een speciaal controlekarakter 'L' voor het parsen en formatteren van logische waarden
Lisp heeft nooit een ingebouwd type boolean gehad. In plaats daarvan gaan voorwaardelijke constructies als cond ervan uit dat de waarde "false" gerepresenteerd wordt door de lege lijst, die per definitie hetzelfde is als het speciale atoom nil of NIL, terwijl elke andere s-expressie als "true" geïnterpreteerd wordt. Voor het gemak wordt in de meeste moderne dialecten van Lisp het atoom t voorgedefinieerd met de waarde t, dus geïnterpreteerd als "true", zodat t als mnemonic gebruikt kan worden voor de boolean waarde "true". Wel verschillen van taal tot taal de waarden die als "false" en "true" opgevat worden.
De aanvankelijke standaard voor de taal C (1972) voorzag niet in een boolean type. Nog tot vandaag worden in latere versies van C-programma's boolean waarden algemeen gerepresenteerd door integers (ints) . De vergelijkingsoperatoren ('>', '==', e.d.) zijn zo gedefinieerd dat ze een integer (int) als resultaat hebben, 0 voor "false" en 1 voor "true". Dezelfde conventie wordt gehanteerd bij de logische operatoren('&&', '||', '!', e.d.) en conditional statements ('if', 'while'). Visual Basic volgt eenzelfde benadering als C. C++ heeft een apart type boolean ('bool'), zij het met automatische conversie vanuit scalairen en pointers, erg lijkend op die bij C.
Pascal (1978) introduceerde het concept van door de programmeur gedefinieerde enumeratie types. Er was voorzien in een ingebouwd Boolean datatype als een voorgedefinieerd enumeratie type met de waarden FALSE en TRUE. Per definitie werden alle vergelijkingen, logische bewerkingen en conditional statements toegepast op boolean waarden en leverden een boolean waarde op. Verder had het Boolean type al de faciliteiten van enumeratie types, zoals ordening en het gebruik van indices. Deze aanpak van booleans als enumeratie type werd overgenomen door de meeste latere talen die enumeratie types hadden, zoals Modula, Ada en Haskell. Nadat enumeratie types (enums) toegevoegd waren aan de ANSI versie van C (1989), werd het gewoon dat programmeurs, uit het oogpunt van leesbaarheid, hun eigen boolean type definieerden.