Boolean
Boolean je v informatice logický datový typ reprezentovaný jednou ze dvou hodnot – true (pravda, 1) nebo false (nepravda, 0). Pro hodnoty typu boolean jsou definovány všechny relační operace (=, ≠, >, <, ≥, ≤). Z toho, že v tomto typu platí uspořádání false < true vyplývá, že i nad tímto typem jsou definovány standardní funkce succ(x), pred(x) a ord(x). Hodnota ord(false) = 0, hodnota ord(true) = 1. A dále jsou zde definovány binární operace konjunkce, disjunkce a unární operace negace. Boolean je pojmenován po Georgeovi Booleovi, objeviteli základů moderní aritmetiky.
Logická tabulka
X | Y | X and Y | X or Y | not X |
---|---|---|---|---|
false | false | false | false | true |
false | true | false | true | true |
true | false | false | true | false |
true | true | true | true | false |
- and – logický součin (konjunkce)
- or – logický součet (disjunkce)
- not – negace
ALGOL
Jeden z prvních programovacích jazyků ALGOL 60, definoval datový typ Boolean
a jeho související operace. Algol 68 zkrátil název na bool
.
Operace s Boolean
operandy:
- op ∨ = (bool a, b) bool: ( a | true | b );
- op ∧ = (bool a, b) bool: ( a | b | false );
- op ¬ = (bool a) bool: ( a | false | true );
- op = = (bool a, b) bool: ( a∧b ) ∨ ( ¬b∧¬a );
- op ≠ = (bool a, b) bool: ¬(a=b);
- op abs = (bool a) int: ( a | 1 | 0 );
Pascal
Boolean
je základní datový typ využívaný v Pascalu. Následuje příklad jeho definice a použití:
{ deklarace v unitu system nebo standard }
Type
Boolean = (False,True);
{ využití }
var
Hodnota: Boolean;
{ ... }
Hodnota := True;
Hodnota := False;
if Hodnota then
begin
{ ... }
end;
Některé překladače jako Delphi mají rozšířený typ boolean (bytebool, wordbool, longbool).
C
V jazyce C až do verze C99 neexistuje zvláštní typ pro logické hodnoty. Operátory porovnávání čísel <
, >
, <=
, >=
, ==
(je rovno), !=
(není rovno), stejně jako logické operátory &&
(konjunkce), ||
(disjunkce) a !
(negace) vracejí hodnoty typu int
, konkrétně hodnotu 1 s významem pravda a hodnotu 0 s významem nepravda; při vyhodnocování v příkazech if
a while
, v logických operátorech &&
, ||
a !
a v podmíněném výrazu ? :
se 0 bere jako nepravda a jakákoli nenulová hodnota jako pravda. Tento přístup převzala celá řada dalších jazyků, jako AWK nebo Perl; některé jazyky pouze doplnily další hodnoty, které se považují za nepravdu (například prázdný řetězec). Konstanty pro logické hodnoty bylo možné ve starších verzích jazyka C definovat pomocí direktiv preprocesoru #define TRUE 1
, #define FALSE 0
.
Ukládání jednobitové hodnoty do mnohabitové celočíselné proměnné je plýtvání pamětí, proto někteří programátoři používají pro logické hodnoty typ char
. Jazyk C poskytuje struktury s bitovými poli, která umožňují využívat jednu celočíselnou proměnnou pro uložení několika logických hodnot, ale mnoho programátorů je považuje za nebezpečné a nepřenositelné (díky rozdílům v ukládání dat do paměti). Proto se v mnoha programech používají pro zhuštěné ukládání logických hodnot operace s bitovými maskami (operátor |=
pro nastavení, operátor &=
pro vynulování a operátor bitové konjunkce &
pro testování). Výčtové typy enum
zavedené v ANSI C umožňují nadeklarovat logické hodnoty jejich pomocí, ale protože se výčtové typy stále považují za pojmenované konstanty typu int
, výsledná vnitřní implementace zůstává nezměněna.
Až od verze C99 obsahuje standard jazyka C logický typ nazvaný _Bool
. Po vložení hlavičkového souboru stdbool.h
lze používat intuitivnější jméno bool
a konstanty true
a false
. Jazyk zaručuje, že při porovnání budou libovolné dvě hodnoty true považovány za stejné (což nebylo splněno před zavedením zvláštního logického typu). Logické hodnoty se stále chovají jako celočíselné, mohou být ukládány v celočíselných proměnných a použity kdekoli, kde lze použít celá čísla, včetně indexování polí, aritmetických operací, načítání a výpisu. Tento přístup (hodnoty Boolean jsou pouze celá čísla) zůstává zachován ve všech pozdějších verzích jazyka C. Neznamená to však, že lze v proměnné typu boolean uložit libovolné celé číslo.
C#
V C# jsou booleovské proměnné identifikovány pomocí vyhrazeného slova bool
, což je alias pro předdefinovný typ System.Boolean
. Tento typ zabírá jeden byte. Nestandardní konverze existují mezi bool
a dalšími typy.
Kód na výstupu by mohl vypadat takto:
bool myBool = (i == 5);
System.Console.WriteLine(myBool ? "I = 5" : "I != 5");
Fortran
V programovacím jazyce Fortran bylo v 50. letech zavedeno klíčové slovo LOGICAL
a související slova .NOT.
, .AND.
, .OR.
.
Objective-C
Objective-C nabízí typ BOOL
, a hodnoty YES
a NO
. Vzhledem k tomu, že Objective-C je nadstavbou C, také zde platí jazyková sémantika pro typ boolean.
PHP
PHP nemá striktně typové proměnné, zato definuje hodnoty true a false. Některé funkce, které typicky vracejí celá čísla nebo řetězce, vracejí false v případě neúspěchu. Spolu s typovým porovnáváním může být odlišeno od hodnoty 0, která v některých případech může být výslednou hodnotou v případě úspěchu (jako například u funkce strpos()
).
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Všimněte si použití ===. Obyčejné == by nefungovalo podle předpokladu,
// protože 'a' je na nultém (prvním) místě.
if ($pos === false) {
echo "Řetězec '$findme' nebyl nalezen v řetězci '$mystring'.\n";
} else {
echo "Řetězec '$findme' byl nalezen v řetězci '$mystring'";
echo " a to na pozici $pos.\n";
}
Python
V Pythonu je datový typ bool
.
pravda = True
nepravda = False
if pravda or nepravda:
print "pravda"
if pravda and not nepravda:
print "pravda"
Java
V programovacím jazyce Java je zaveden primitivní typ boolean
.
boolean i = true;
if (i)
System.out.println("i je pravda.");
else
System.out.println("i neni pravda.");
V jazyce Java mohou být boolean hodnoty (stejně jako ostatní primitivní typy) konvertovány na řetězce (výsledkem je řetězec true nebo false).
GML
Protože GML pracuje pouze s datovými typy String (řetězec) a Real (reálné číslo), v GML neexistuje datový typ boolean. GML typ boolean simuluje tak, že definuje konstantu true, resp. false, která obsahuje reálné číslo 1, resp. reálné číslo 0.
promenna0 = choose(true,false) // definuje, že promenna0 je boolean a nese náhodně pravdu či nepravdu
promenna0 = !promenna0 // promenna0 se invertuje (z true je false a z false je true)
if(promenna0) // pokud promenna0 nese pravdu
{
show_message("true") // zobrazí zprávu "true"
}
else // jinak (pokud nenese pravdu)
{
show_message("false") // zobrazí zprávu "false"
}
Související články
Externí odkazy
- (anglicky) Boolean operations