Pokročilé operátory

Logické výrazy jsou nenahraditelné při řízení běhu programu, kterému se budeme věnovat v dalších dílech. Jsou to ...


Logické výrazy jsou nenahraditelné při řízení běhu programu, kterému se budeme
věnovat v dalších dílech. Jsou to výrazy, jejichž výsledkem je logická hodnota.
O logickém výrazu můžeme říci, že je buď pravdivý, nebo nepravdivý. Například
výraz: 1 > 0 je pravdivý logický výraz. Logické výrazy mohou být i složitější.
Příklad nepravdivého výrazu může vypadat takto: (2+3) == (3*2). Jistě vás
napadne, že v logických výrazech se neobejdeme buď bez relačních operátorů, o
kterých jsme mluvili posledně, nebo bez datového typu bool. V jazyku C#
existují pro výsledky logických výrazů dvě předdefinované hodnoty. Pravdivé
logické výrazy mají hodnotu true, nepravdivé hodnotu false.
Logické operátory
Často je třeba vyhodnotit několik logických výrazů současně. To jsou případy,
kdy musí například dvě podmínky platit současně, nebo naopak nesmí být splněna
žádná z nich apod. K vyhodnocování několika logických výrazů slouží logické
operátory. Jejich výsledkem je opět logická hodnota udávající celkový výsledek.
C# zná celkem čtyři logické operátory, jejichž přehled je zobrazen v tabulce.
Operátor logického součinu (&&) vrací hodnotu true pouze tehdy, jsou-li na jeho
obou stranách pravdivé výrazy (mají hodnotu true). Jinými slovy výsledek je
pravdivý, pokud jsou současně pravdivé oba operandy. Proto výraz (1>0) && (2>1)
je pravdivý, protože jednička je větší než nula a současně dvojka je větší než
jedna. Naopak výraz (1>0) && (2>3) je nepravdivý, protože je splněna pouze
první podmínka.
U logického součtu (||) stačí, když je pravdivý pouze jeden výraz a výsledek
bude rovněž pravdivý. Výraz je tedy pravdivý, pokud je pravdivá jeho jedna nebo
druhá část. Jsou-li splněny obě části, výsledek je pochopitelně opět pravdivý.
Z toho vyplývá, že výrazy (1>0) || (2==3), (10) || (2==2)
jsou pravdivé, protože buď jedna nebo druhá část je pravdivá (případně obě).
Naproti tomu výraz (1 nepravdivé.
Poněkud jiná je situace u exkluzivního logického součtu (^), kde je výraz
pravdivý, pouze když je pravdivá jeho jedna nebo druhá část. Jestliže jsou
pravdivé obě části, je celý výraz nepravdivý. V tomto případě budou tedy
pravdivé pouze výrazy (1>0) ^ (2==3), (1 (2==0), (1>0) ^ (2==2) jsou nepravdivé.
Poslední operátor, negace (!), je unární. To znamená, že používá jen jeden
operand. Jeho výsledkem je opačná hodnota, než jakou má jeho operand. Například
výraz !(1>0) je nepravdivý a výraz !(0>2) je pravdivý.
Při používání logických operátorů je třeba pamatovat na to, že logické výrazy
se vyhodnocují zleva doprava a vyhodnocení končí v okamžiku, kdy je možné o
výsledku rozhodnout. To znamená, že ne všechny výrazy je nutné vyhodnocovat.
Představte si následující výraz: (1 == 2) && (1>0). Levá část výrazu se
vyhodnotí jako první. Ta je nepravdivá. My jsme si ovšem řekli, že při logickém
součinu může být výsledek true pouze tehdy, pokud jsou pravdivé obě části. A
vzhledem k tomu, že levá část je nepravdivá, bude nepravdivý celý výraz bez
ohledu na to, co bude na jeho pravé straně. Proto se již pravá strana
nevyhodnocuje a vrátí se hodnota false. Uvedené pravidlo je velmi důležité a
může mít zásadní dopad na chování celého programu. Stačí, aby vyhodnocení
výrazu na pravé straně mělo mít nějaké vedlejší účinky a problémy jsou na
světě. V logickém výrazu se totiž může objevit i výsledek nějaké funkce (o
funkcích budeme mluvit v některém z dalších dílů). Jestliže ale bude tato
hodnota na pravé straně relačního operátoru, může se stát, že se funkce vůbec
neprovede. Proto pokud budete v logických výrazech používat funkce, pamatujte
na toto nebezpečí.
Ternální operátor Ternální neboli podmínkový operátor je schopen vyhodnotit
zadaný logický výraz a podle jeho výsledku vrátit jednu ze zadaných hodnot.
Obecný zápis operátoru by vypadal nějak takto:
(podmínka) ? (výsledek při splněné podmínce) : (výsledek při nesplněné podmínce)
Použití operátoru si ukážeme na jednoduchém příkladu. Naprogramujeme stránku,
která na základě hodnoty v určité proměnné dokáže přizpůsobit oslovení svého
návštěvníka. Zde je zdrojový kód stránky:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Použití ternálního operátoru


= jeNavstevnikZena ? "paní." : "pane."; Response.Write(pozdrav + osloveni);
Response.Write("
Obsah proměnné jeNavstevnikZena je " +
jeNavstevnikZena); %>


Formát oslovení je závislý na hodnotě proměnné jeNavstevnikZena. Podle jejího
obsahu uloží ternální operátor do proměnné osloveni správný řetězec. Ten je pak
spolu s pozdravem vypsán na stránku. Na další řádek je ještě pro názornost
vypsán obsah proměnné jeNavstevnikZena. Spusťte příklad a podívejte se na
výsledek. Potom přepište hodnotu proměnné jeNavstevnikZena z true na false a
spusťte příklad znovu. Tím se nejlépe přesvědčíte, že vše funguje stejně jako
na obrázku.
Aritmetické operátory
V uvedeném příkladu si všimněte ještě jedné zvláštnosti. V příkazech, které
vypisují textové řetězce na stránku, se používá operátor + pro proměnné typu
string. Je však pochopitelné, že nejde o klasické sčítání (jaký výsledek byste
dostali, kdybyste sečetli slova "les" a "kapradina"?), ale řetězce se pouze
spojí za sebe. Řádek, na kterém vypisujeme obsah proměnné, navíc ukazuje, že
lze "sčítat" i textové řetězce s proměnnými jiných typů. Hodnota takové
netextové proměnné je nejprve automaticky převedena na text a výsledek se spojí
s řetězcem na druhé straně operátoru +. Pokud se nepodaří převést hodnotu
proměnné na text, ASP.Net ohlásí chybu. Důležité je také vědět, že ostatní
aritmetické operátory nelze ve spojení s řetězci použít.(pat) 6 1309
Logické operátory
OperátorVýznam
&&logický součin
||logický součet
^exkluzivní logický součet
!negace









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.