Podmínky
Stejně jako se musíme rozhodovat my, koná tato rozhodnutí během svého běhu i většina počítačových programů. Rozhodnutí jsou činěna na základě vyhodnocení určitého výrazu a stanovení zda je či není pravdivý, tedy zda je pravda (true) nebo není pravda (false).
puts 1 > 2 puts 2 > 1 puts '' puts 5 >= 5 puts 5 <= 4 puts '' puts 1 == 1 puts 2 != 1
odpovědí programu je
false true true false true true
Tedy platí, že 1 není větší než 2, 2 je větší než 1, 5 je větší nebo rovno než 5 a 5 není menší nebo rovno než 4. Poslední dvě podmínky značí, porovnání, resp. nerovnost dvou čísel. Tedy je pravda, že se číslo 1 rovná číslu 1 a také platí, že číslo 2 se nerovná číslu 1.
Porovnání == resp. != se v programování používají velmi často. Běžně je potřeba zjistit, zda se nějaká proměnná rovná či nerovná námi hledané či sledované hodnotě.
Zatímco zápis a = b znamená do a přiřaď b, výsledkem zápisu a == b je hodnota true nebo false.
Také můžete porovnávat dva textové řetězce
puts 'kocka' < 'pes' puts 'kocka' > 'pes' puts 'KOCKA' > 'pes'
zobrazí
true false false
V případě textových řetězců se porovnává jejich umístění v abecedě.
Platí, že písmena velké abecedy se nachází před písmeny malé abecedy a tak např. Zebra se nachází před autem. Pokud nevíte, zda budou slova začínat malými či velkými písmeny, můžete použít pro sjednocení velikosti metody downcase, upcase a capitalize.
Vyhodnocení podmínky
Nyní, když jsme schopni určit co je a není pravda, můžeme na základě těchto znalostí činit závěry. K tomu slouží konstrukce if
podmínka … end
(jestliže podmínka pak udělej … konec).
puts 'Ahoj, jak se jmenuješ?' jmeno = gets.chomp puts 'Ahoj ' + jmeno + '!' if jmeno == 'Martin' puts 'To je ale pěkné jméno!' end
zobrazí
Ahoj, jak se jmenuješ? Martin Ahoj Martin! To je ale pěkné jméno!
V případě, že zadáte jiné jméno, pak bude výstupem např. následující:
Ahoj, jak se jmenuješ? Adam Ahoj Adam!
Jistě bychom dříve či později chtěli provést také odpovídající činnost v situaci kdy nebude počáteční podmínka splněna. K tomu slouží klíčové slovo else
(jinak).
puts 'Ahoj, jak se jmenuješ?' jmeno = gets.chomp puts 'Ahoj ' + jmeno + '!' if jmeno == 'Martin' puts 'To je ale pěkné jméno!' else puts 'Nechceš se nechat přejmenovat?' end
zobrazí v případě nesplnění podmínky
Ahoj, jak se jmenuješ? Adam Ahoj Adam! Nechceš se nechat přejmenovat?
Podmínky lze do sebe také vnořovat. Tyto programy jsou na první pohled trochu složitější ale díky správnému strukturování kódu se čtou celkem snadno.
puts 'Ahoj, jak se jmenuješ?' jmeno = gets.chomp if jmeno == jmeno.capitalize puts 'Ahoj ' + jmeno + '!' else puts 'Myslel jsi ' + jmeno.capitalize + ', že?' puts 'Umíš vůbec správně napsat své jméno?' odpoved = gets.chomp if odpoved.downcase == 'ano' puts 'Aspoň, že tak..' else puts 'Přestaň si ze mě dělat srandu!' end end
zobrazí např.
Ahoj, jak se jmenuješ? adam Myslel jsi Adam, ze? Umíš vůbec správně napsat své jméno? ano Aspoň, že tak..
Kód svého programu byste měli psát s ohledem na provádění pozdějších změn. Neměl by působit dojmem šifry, ale měl by být příjemným čtením po nedělním obědu či před spaním.
Cykly
Cykly představují opakující se smyčku, která skončí až v okamžiku, kdy to dovolíme.
prikaz = 'Zadejte příkaz' while prikaz != 'konec' puts prikaz prikaz = gets.chomp end puts 'Na shledanou'
zobrazí
Zadejte příkaz help help ? ? konec Na shledanou
Tento cyklus je tedy uvozen klíčovým slovem while
na jedné straně a end
na straně druhé. Česky řečeno: dokud platí podmínka dělej … konec. Cyklus tedy končí v okamžiku kdy je podmínka nesplněna.
Pozor na nekonečné cykly (cykly, které nikdy neskončí)! Někdy se nám tyto cykly mohou hodit, jindy značně ztěžují hledání chyb. Nekonečný cyklus ukončíte stiskem kláves [Ctrl+c].
Trocha logiky
Pojďme nyní zkombinovat to, co jsme se dozvěděli v předchozí části, a podívejme se na následující příklad
puts 'Jak se jmenujete?' jmeno = gets.chomp puts 'Ahoj ' + jmeno + '.' if jmeno == 'Martin' puts 'To je opravdu pěkné jméno.' else if jmeno == 'Adam' puts 'To je opravdu pěkné jméno.' end end
Tento zápis je jistě v pořádku, ale jak je vidět, není příliš praktický ani úsporný. Celé si to můžeme zkrátit pomocí podmínky or
(česky nebo).
puts 'Jak se jmenujete?' jmeno = gets.chomp puts 'Ahoj ' + jmeno + '.' if (jmeno == 'Martin' or jmeno == 'Adam') puts 'To je opravdu pěkné jméno.' end
Platí následující poučka: Co nemá programátor v hlavě, to musí mít v prstech. Tuto větu lze i zobecnit …
Mezi další logické operátory patří and
(a) a not
(negace výroku). Jak tyto operátory fungují, můžete vidět v dalším příkladě.
jaJsemMartin = true jsemZelenej = false jimMaso = true mamRadBehani = false puts (jaJsemMartin and jimMaso) puts (jaJsemMartin and jsemZelenej) puts (jsemZelenej and jimMaso) puts (jsemZelenej and mamRadBehani) puts puts (jaJsemMartin or jimMaso) puts (jaJsemMartin or jsemZelenej) puts (jsemZelenej or jimMaso) puts (jsemZelenej or mamRadBehani) puts puts (not jaJsemMartin) puts (not jsemZelenej)
zobrazí
true false false false true true true false false true
Příklady 6
A co bude příště? Příště se podíváme na pole. Ne, nemusíte si chystat pracovní oděv, řeč bude o poli prvků, ať už jsou jeho prvky jakékoliv.