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