Typ danych Boolean to podstawowy typ logiczny, który może przyjmować jedną z dwóch wartości: true (prawda) lub false (fałsz). Nazwa pochodzi od nazwiska angielskiego matematyka George'a Boole'a, który sformułował podstawy logiki algebraicznej wykorzystywanej w informatyce i elektronice. W wielu językach programowania zmienna tego typu służy do zapisywania wyników porównań oraz sterowania przepływem programu (instrukcje warunkowe, pętle, filtry itp.).

Typ boolean został oficjalnie ustandaryzowany m.in. w językach C (jako _Bool w standardzie C99) oraz w C++ (formalnie wprowadzony w standardzie C++98). Wyrażenia boolean również kończą się wartością true lub false i są podstawą podejmowania decyzji w kodzie.

  • Zastosowania: instrukcje warunkowe (if/else), pętle (while, for), operatory logiczne, zwracanie rezultatów funkcji, walidacja danych.
  • Typowe literały: true i false (w Pythonie: True/False — wielka litera).
  • Typowe operatory logiczne: koniunkcja (AND), alternatywa (OR), negacja (NOT) — w składni C/Java/JavaScript: &&, ||, !; w Pythonie: and, or, not.

Prosta tabela prawdy dla dwóch operandów A i B:

  • A AND B: prawda tylko gdy A i B są true.
  • A OR B: prawda gdy przynajmniej jedno z A lub B jest true.
  • NOT A: prawda gdy A jest false.

Różnice i uwagi w różnych językach — krótko:

  • C/C++: w C od C99 dostępny typ _Bool, w C++ występuje bool. Wartości logiczne są często reprezentowane jako 0 (false) i 1 (true), choć rozmiar/wewnętrzna reprezentacja może być zależna od implementacji (często 1 bajt).
  • Java: typ prymitywny boolean. Rozmiar nie jest formalnie określony jako bajty w JVM, ale wartość logiczna istnieje jako oddzielny typ; w tablicach booleanów implementacje JVM często używają jednego bajtu na element.
  • JavaScript: typ boolean, ale język ma też pojęcie "truthy"/"falsy" — różne wartości (np. 0, "", null, undefined, NaN) są traktowane jako false w kontekstach warunkowych, mimo że formalnie nie są typu boolean.
  • Python: typ bool z dwoma literami: True i False. bool jest podtypem int (True==1, False==0).
  • SQL i inne języki: składnia i dostępność typu boolean różnią się między implementacjami (np. niektóre dialekty SQL używają TRUE/FALSE, inne zastępują to typami znakowymi lub liczbowymi).

Konwersje i „truthiness”: wiele języków automatycznie konwertuje wartości na boolean w kontekstach warunkowych. Należy rozróżniać:

  • typ boolean — zmienna faktycznie przechowuje true/false,
  • truthy/falsy — koncepcja przyjmowana przez niektóre języki (np. JavaScript, Python), gdzie różne wartości są interpretowane jako prawda lub fałsz w warunkach.

Operatory bitowe vs logiczne: w wielu językach istnieją oddzielne operatory bitowe (&, |, ^) oraz logiczne (&&, ||, !). Operatory logiczne zwykle stosowane do wartości boolean i często zachowują short-circuit (przy && lub || druga część nie jest oceniana, jeśli wynik jest już przesądzony), natomiast operatory bitowe działają na poziomie bitów lub wymuszają ocenę obu operandów.

Przykłady (fragmenty kodu):

// C++ bool a = true; if (a && (5 < 10)) {     // kod wykona się, bo a == true i 5 < 10 }  // JavaScript let b = false; if (!b) {   // wykona się, bo !false == true }  // Python x = 0 if not x:     # wykona się, bo 0 jest "falsy"     pass 

Praktyczne wskazówki:

  • Stosuj boolean do reprezentowania jednoznacznych stanów (włączone/wyłączone, prawda/fałsz), aby kod był czytelny.
  • Uważaj na automatyczne konwersje i "truthiness" — jawne porównanie (==, === w JS) może zapobiec nieoczekiwanym zachowaniom.
  • Znaj różnice między operatorami logicznymi a bitowymi i wykorzystuj short-circuiting tam, gdzie to potrzebne.
  • Dokumentuj semantykę zmiennych boolowskich — sama nazwa może nie wystarczyć (np. isActive, hasErrors są lepsze niż ogólne flag).

Podsumowując, typ boolean jest fundamentem logiki w programowaniu — prosty w koncepcji, ale wymaga uwagi przy konwersjach i w zależności od specyfiki języka, w którym programujemy.