Översikt
En boolsk datatyp är en grundläggande typ inom datavetenskap och programmering som kan anta två distinkta värden: sant eller falskt. Den används för att uttrycka logiska villkor och utvärderas i kontrollflöden som if-satser, loopar och villkorliga uttryck. I de flesta språk skrivs värdena med reserverade ord som true/false, True/False eller 1/0 beroende på syntax och språkets konventioner.
Egenskaper och representation
Boolska värden är nära knutna till boolesk algebra, där operationer som AND, OR och NOT kombinerar eller inverterar sanning. I programmeringsspråk motsvaras dessa ofta av operatorer som &&, || och !, eller språkberoende namn som and, or, not. Internt representeras ett boolskt värde vanligtvis som en enda bit konceptuellt, men många språk och system reserverar en byte eller mer för enklare adressering och prestanda.
- Vanliga operatorer: AND, OR, NOT (&&, ||, !)
- Konventioner: true/false, True/False eller 0/1
- Intern representation: ofta en byte, men varierar mellan språk och plattform
Historik och namngivning
Namnet kommer från matematikern George Boole, som på 1800-talet formulerade regler för symbolisk logik som senare blev grunden för digital kretsdesign och programmeringslogik. I moderna programmeringsspråk infördes en dedikerad boolsk typ i olika skeden; som exempel standardiserades bool i C++-standarden 1998. Begreppet i sig är dock betydligt äldre och härrör direkt från boolesk algebra.
Användningsområden och exempel
Boolska typer används allmänt för att styra beslutsfattande i program och för att uttrycka predikat (sanningstest). Exempel på vanliga användningar är:
- Villkorssatser (if, switch) och loopar (while, for)
- Flaggor och konfigurationsalternativ (till exempel en DEBUG-flagga)
- Bitmasker och logiska uttryck i filter och sökningar
- Funktionspredikat som returnerar sant/falskt för att beskriva egenskaper hos data
I många språk förekommer även begreppet "truthiness": vissa icke-boolska värden tolkas som sanna eller falska i ett logiskt sammanhang (till exempel tomma strängar eller noll i vissa språk). Det skiljer sig från strikt boolsk typkontroll där endast riktiga booleanvärden accepteras.
Skillnader, fallgropar och notabla fakta
Det finns flera viktiga skillnader att känna till mellan olika språk och domäner. I SQL till exempel införs ofta trevärd logik där NULL leder till ett tredje tillstånd (UNKNOWN), vilket påverkar jämförelser och villkor. I dynamiska språk som Python eller JavaScript kan objekt och tal ha "truthy" eller "falsy" karaktär, vilket betyder att värden som 0, "" eller [] kan behandlas som falska i villkor även om de inte är av typen bool.
Andra praktiska noteringar: kortslutningsutvärdering (short-circuit) gör att högerledet i ett logiskt uttryck inte alltid körs; detta används ofta för att undvika onödiga beräkningar eller undvika fel (till exempel kontroll före åtkomst). Vid interoperabilitet mellan språk och vid systemnivå kan man också behöva översätta mellan olika representationer av sant/falskt.
För en fördjupning om hur uttryck utvärderas och byggs upp, se även boolska uttryck.