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