InterSystems B.V.
Logické výrazy, aneb co je pravda a
co lež – pokračování
V tomto díle dokončíme přehled jednoduchých příkazů
a následně se zaměříme na příkazy strukturované.
Break
Příkaz break
ukončí vykonávání
cyklu, v němž je použit, a předá řízení na řádek
následující po tomto cyklu:
>>> for i in range(0, 9):
... if i > 4:
... break
... print "i:", i
...
i: 0
i: 1
i: 2
i: 3
i: 4
Continue
Příkaz continue
ukončí vykonávání
těla cyklu a předá řízení na začátek cyklu, pro další
kolo iterace:
>>> for i in range(0, 5):
... if i == 2:
... print 'Dvojku vynechame'
... continue
... print "i:", i
...
i: 0
i: 1
Dvojku vynechame
i: 3
i: 4
Del
Příkaz del
vymaže proměnnou:
>>> a = [1, 2, 3]
>>> print a
[1, 2, 3]
>>>
>>> del a
>>> print a
Traceback (innermost last):
File "<console>", line 1, in ?
NameError: a
>>>
>>> a = [1,2,3,4]
>>> del a[2]
>>> print a
[1, 2, 4]
Pass
Příkaz pass
nezpůsobuje žádnou akci.
Používá se v případech, kdy syntaxe jazyka vyžaduje,
aby zdrojový kód obsahoval nějaký příkaz, ale
současně není žádoucí, aby se cokoli vykonalo.
>>> #definice prazdne funkce, ktera vubec nic nedela, jen je
>>> def dummy():
... pass
...
>>>
>>> #definice prazdne tridy
>>> class EmptyClass:
... pass
...
>>>
Print
Příkaz print
vyhodnotí výraz, který
obdrží jako parametr, konvertuje jej na řetězec a
zapíše jej na standardní výstup.
print [vyraz]
Výstup je možné též přesměrovat do instance
datového typu Jython file
.
print >> instanceTypuSoubor, vyraz
>>> print "Hello world!!!"
Hello world!!!
Return
Příkaz return
ukončí vykonávání
metody nebo funkce a vrátí hodnotu vyhodnoceného
výrazu, který je možné zadat jako parametr. Pokud
žádný výraz v příkazu return
uveden
není, vratí se None
.
Syntaxe:
return [vyraz]
>>> def mojeFce():
... return 'vrati tento retezec'
...
>>> mojeFce()
'vrati tento retezec'
Strukturované příkazy
Strukturované příkazy mají tu vlastnost, že logická
řádka může zabírat i více fyzických řádek. Většinou
se jedná o jazykové konstrukce jako jsou cykly či
větvení.
Blok
Jython má poněkud nestandardní přístup k definování
počátku a konce bloku kódu. Neexistuje žádný
explicitně definovaný znak, jako např. složené
závorky v Javě, určený pro tento účel.
Bloky kódu (funkce, větvení if
,
cykly for
, ….) jsou definovány
jejich zarovnáním. To znamená, že všechny mezery
(přesněji řečeno bílé znaky, jako mezery, tabulátory
atd.) jsou při zápisu kódu podstatné a mají svůj
význam. Musejí být používány konzistentně.
Jedním z přínosů tohoto způsobu zápisu programového
kódu je, že všechny programy v Jythonu vypadají
podobně. Způsoby zarovnání nejsou již věcí stylu
programátora, ale jsou vynuceny definicí jazyka.
Pravidla pro zarovnávaní programového kódu jsou
následující:
- První řádek souboru musí začínat v nejlevějším
sloupci. - Každý příkaz v bloku musí začínat v témže
sloupci. - Každé z klíčových slov (
class
,
def
,for
/else
,if
/elif
/else
,try
/except
/else
,try
/finaly
,while
/else
) označuje
začátek nového bloku. - Nový blok musí být zarovnán doprava alespoň o
jednu mezeru vůči konci předchozímu bloku.
Standardně se zarovnává doprava o čtyři mezery,
nebo o jeden tabulátor.
Výše uvedená pravidla mohou znít nesrozumitelně,
níže uvedený příklad tato pravidla názorně osvětlí:
for x in (1,2,3):
print x #zarovnani oznacujici zacatek noveho bloku
for y in (10, 20, 30):
if y > 10: #zarovnani oznacujici zacatek noveho bloku
print y #zarovnani oznacujici zacatek noveho bloku
print x*y #zarovnani do leva oznacujici konec predchoziho bloku
#dalsi prikaz by mohl pokracovat zde jako soucast vnitrniho cyklu
#nebo zde, jako soucast vnejsiho cyklu
#nebo zde, jako samostatny prikaz, nepatrici do tela cyklu
Po řádce obsahující klíčové slovo interpret příkazů
občas z důvodu konzistence vyžaduje novou zarovnanou
řádku. V případě, že nechceme, aby se cokoliv na této
vykonalo, je možné použít příkaz pass
.
def prazdnaFunkce():
pass
Podmíněný příkaz
Podmíněný příkaz má v Jythonu syntaxi:
if logicky_vyraz:
blok
elif logicky_vyraz:
blok
else:
blok
Klausule elif
je nepovinná a může se
v příkazu vyskytovat libovolněkrát. Klausule else
je taktéž nepovinná.
Mechanismus určující, ke kterému příkazu if
se váže koncové else
,
závisí na zarovnání. V níže uvedeném příkladu se
else
váže k if
na
nejvyšší úrovni:
>>> x, y, z = 10, 20, 30
>>> if x == 3:
... if y == 20:
... if z == 35:
... pass
... else:
... print x
Cykly
Jython obsahuje dvě konstrukce pro cykly. Obecný
cyklus while
a cyklus for
, určený pro zpracovávání sekvencí.
While cyklus
Cyklus while
ma následující syntaxi:
while logicky_vyraz:
blok
else:
blok
Tělo cyklu bude vykonáváno tak dlouho, dokud bude
mít logicky_vyraz hodnotu pravda. Vnitřní blok cyklu může obsahovat příkaz continue
. Tento příkaz předá řízení zpět na
začátek cyklu. Do vnitřního bloku cyklu je možné
vložit i příkaz break
, který ukončí
vykonávaní vnitřního těla cyklu.
Klausule else
, je nepovinná. Blok
následující za tímto klíčovým slovem se vykonává
právě jednou, pokud cyklus skončí normálně, tj. pokud
bude mít logicky_vyraz hodnotu nepravda. Pokud je cyklus ukončen příkazem
break
, blok za příkazem else
se nevykoná.
V Jythonu není možné napsat konstrukci, jakou znáte
třeba z Javy,
while((c = char()) == -1) {
System.out.println(c);
}
a to z toho důvodu, že přiřazení nevrací hodnotu,
jako v Javě. V Jythonu místo toho použijeme obrat:
while 1:
prirazovaci prikaz
if test:
break
zbytek bloku