|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Perl (6) - Pravdivostní výrazyVýrazy jsou základním kamenem programovacích jazyků. Je jimi cokoliv, co má nějakou hodnotu. Jinými slovy, výrazy se vyskytují v podstatě na každém řádku kódu.
Každý zápis, jehož vyhodnocením získáme nějakou hodnotu, je výrazem. Připomeňme, že s výrazy se setkáváme již od počátku seriálu. Například konstanty (tedy samotná čísla nebo řetězce), proměnné, příkaz print jsou všechno výrazy. Dnes si uděláme jejich systematičtější přehled a značně rozšíříme arzenál operátorů, kterými se určuje, jak se má výraz vyhodnocovat. Trochu nepřesně lze říci, že výraz se středníkem na konci se stává příkazem. Proto, pokud jakémukoliv příkazu odejmeme středník, získáme výraz. Příkaz tedy má také nějakou hodnotu - a to i když není potřebná. Například, k čemu nám je, že příkaz print vrátí hodnotu 1? Většinou k ničemu, nicméně z principu je vyhodnocení nezbytné, neboť musí jít vyhodnotit každý výraz. Dokonce lze říci, že program je posloupností výrazů a středníků. Pravdivostním výrazem myslíme výraz, který se vyhodnocuje na typ pravda / nepravda (například test u podmínek). Ve skutečnosti je ale každý výraz pravdivostní. Vyhodnocením libovolného výrazu je totiž možné získat pravdu nebo nepravdu. I přesto se teď zaměřme jen na výrazy tvořené relačními, logickými a pro zajímavost i bitovými operátory. Způsoby vyhodnocováníZačněme ukázkou. Co vytisknou následující příkazy?
V prvním případě bylo vytisknuto 1, ve druhém případě "" (tedy prázdný řetězec). Proč? Číslo 9 je skutečně větší než 6. Výraz se tedy vyhodnotí jako pravda a tiskne se hodnota true. Protože Perl neobsahuje žádný speciální booleovský datový typ, uchovávající pouze hodnoty false a true, tiskne se místo true hodnota 1. Naopak prázdný řetězec značí false. Obvyklou konvencí je, že úspěšně vykonaný příkaz vrátí pravdivou hodnotu a neúspěšně vykonaný nepravdivou. Zkuste na základě tohoto a předchozího odstavce určit, co se vytiskne následujícím příkazem:
Test porovnání dvou hodnot můžeme užít v podmínce:
Všimněme si, že jsme použili apostrofy jako označení řetězce. To proto, aby se místo $a a $b nevytiskly jejich hodnoty. (i když by to v tomto případě zas tolik nevadilo) Zkusme ještě další příklad:
Operátory pro porovnávání (relační operátory):
Výsledky porovnávání čísel jsou intuitivní - řídí se zákony matematiky. Ale jak se porovnávají řetězce? Perl vezme první znak levého operandu a porovná jej s pravým. To samé s druhým atd. Každý znak bere jako číslo, určené jeho ASCII hodnotou. První odlišnost, kterou Perl objeví rozhodne o výsledku porovnání. Není-li žádná odlišnost, výrazy jsou si rovny.
Operátor <=> vrací hodnotu 1, je-li pravý výraz větší než levý, hodnotu -1, je-li levý výraz větší než pravý nebo hodnotu 0, jsou-li výrazy na obou stranách stejné.
Logické operátoryObyčejné testy většinou nestačí. Občas potřebujeme podmínku typu je-li a > b a zároveň a > d. Od toho jsou logické operace.
Céčkovský zápis operátorů má stejný význam jako operátory, liší se jen v prioritě. Konjunkce je splněna, jsou-li oba její operandy true. Disjunkce je splněna, je-li alespoň 1 její operand true (je-li true první operand, druhý je přeskočen a už se nevyhodnocuje - výsledek by to neovlivnilo; této vlastnosti můžeme použít při konstrukcí podmínek bez řídících konstrukcí).
Defined-or dělá totéž jako logické nebo až na to, že levý operand je testován na definovanost (nikoliv na pravdivost). Nebudeme se jím zatím zabývat, avšak jde o užitečný nástroj pro konstrukci podmínek bez řídících konstrukcí. Negace vrací opačnou hodnotu než její operand. Jde o unární operátor.
Přiřazení jako test podmínkyJako test se hojně používá i přiřazení (nejčastěji ve spojení se čtením dat ze souboru, databáze apod.). Přiřazujeme-li hodnotu true, je i celý test true. Přiřazujeme-li hodnotu false, je test také false.
Připomeňme, že to není porovnávání. To bychom museli použít operátor ==. Příklad - absolutní hodnotaZkusme napsat program, který vypíše absolutní hodnotu čísla. Stačí vynásobit hodnotu číslem -1, pokud je záporná.
Chceme-li, dá se podmínka pomocí podmínkového operátoru zahrnout přímo do funkce print.
V tomto případě se nejdříve vyhodnotí výraz $hodnota < 0 ? $hodnota * -1 : $hodnota a poté se tiskne. Bitové operátoryJeště se zmiňme o dalším typu operací - bitových. Pokud vás nezajímají, klidně tuto část přeskočte, protože se s nimi běžný člověk nesetkává často. Bitové operace mají význam jen v případě celočíselných operandů (zadáme-li desetinné číslo, Perl si desetinnou část odřízne). Podívejme se na tabulku bitových operátorů.
Bitové operátory fungují tak, že je operand (nebo operandy) převeden do dvojkové soustavy. U operátorů &, | a ^ Perl postupně porovnává bity na stejných pozicích. Následující tabulka ilustruje význam bitových operátorů:
bitové notKaždý výsledný bit je doplňkem bitu operandu do 1. Funguje tudíž na různých počítačích jinak (podle rozsahu čísla). Zkusíme negaci pro 110101110000101:
bitové andPokud jsou v pravém i levém operandu bity na stejných pozících 1, výsledkem na daném bitu je 1. V ostatních případech je výsledkem 0.
1631 a 55 vyjádříme ve dvojkové soustavě. Odtud je zřejmé, jak se k výsledku došlo.
bitové orPokud jsou v operandech oba bity na stejných pozicích 0, výsledkem bitu na dané pozici ve výsledku je 0. Vyskytne-li se v jednom z nich 1 (tedy všechny ostatní případy), výsledkem je 1.
To je zřetelné odtud:
bitové xorČíslice 1 a 0 nebo 0 a 1 se vyhodnotí jako 1, v ostatních případech je výsledkem 0.
Bitově:
bitový posunOperátor >> umazává zprava bity, operátor << (zleva) přidává nuly.
Bitově:
|
Search Software
Search Google
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |