Boolean
Author
Albert FloresBoolean je v informatice datový typ určený pro reprezentaci pravdivostních hodnot pravda (true) a nepravda (false). Zatímco jazyky ALGOL a Pascal zavádějí zvláštní typ pro logické hodnoty, umožňují deklarovat proměnné tohoto typu a používat je na místě podmínek, část nejstarších programovacích jazyků na syntaktické úrovni oddělovala výrazy a logické podmínky, které byly výsledkem uplatnění relačních operátorů (=, ≠, >,
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
Cacl (Excel)
V tabulkovém editoru Calc, popř. Excel počítáme s booleovskými proměnnými jako s běžnými čísly, jen nakonec výsledek absorbujeme dvojitou negací. +more K tomu slouží funkce NOT: =NOT(5) . NEPRAVDA =NOT(5)*1 . 0 =NOT(NOT(5)) . PRAVDA =NOT(NOT(5))*1 . 1 Ukažme to na příkladu zákona distribuce u součinu, který neplatí v běžné algebře: Jestliže A=B=C=1, pak v normální algebře A+(B. C) ≠ (A+B). (A+C) 2≠4 V Booleovské logice se ale rovnají, protože výsledky obou stran musíme absorbovat. V Calcu tuto absorpci děláme dvojitou negací: =NOT(NOT(A1+(B1*C1))) . PRAVDA =NOT(NOT((A1+B1)*(A1+C1))) . PRAVDA.
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
V jazyce Pascal je typ boolean ordinální typ, pro který jsou definovány všechny relační operace (=, ≠, >, { typ boolean se chová jako výčtový typ hodnotami false a true } 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), . +more= (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). +more 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. +moreh 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. +more 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 . +moreNOT. , . 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. +more 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ě. +more 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. +more 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" }
Odkazy
Související články
Logická proměnná * Booleova algebra
Externí odkazy
[url=https://web.archive.org/web/20081103095712/http://www.python.org/doc/2.5.2/ref/Booleans.html]Boolean operations[/url]