6.4 KiB
6.4 KiB
Řídicí struktury
- Řídicí struktury
- Programové konstrukce, které se skládají z dílčích příkazů
- Určují způsob provedení těchto příkazů
- ovlivňují směr provádění programu => bez nich by program běžel postupně od prvního do posledního příkazu
- Tři základní řídící struktury
- Posloupnost
- Příkazy jsou v posloupnosti a vždy se provedou v pořadí, v jakém jsou zapsány („řádku po řádce“)
- Složený příkaz (blok)
- Několik příkazů uzavřených do složených závorek „{“ a „}“
- Např. tělo metody
main()
(a jakékoliv jiné metody) je blok - Často se využívá s větvením a cykly
- Příkazy v bloku důsledně odsazujeme alespoň dvěma mezerami nebo tabulátorem
- V Javě téměř ve všech případech využití bloku otevírací závorce „{“předchází předchozí konstrukce (např. hlavička metody, větvení, cyklus) napsaná na STEJNÉ řádce jako tato závorka
- Větvení
- V závislosti na splnění podmínky se provede jen určitá část programu
- Příkaz
if
pro jednoduché větvení (neúplný podmíněný příkaz) a příkazif - else
pro dvojité větvení (úplný podmíněný příkaz)
- Cyklus
- V závislosti na splnění podmínky se část programu opakuje
- Příkaz
for
- pro cyklus s předem známými mezemi (s předem známým počtem opakování)
- Příkaz
while
- pro cyklus a předem neznámými mezemi
- Příkaz
do - while
pro cyklus s předem neznámými mezemi
- Příkaz
- V závislosti na splnění podmínky se část programu opakuje
- Posloupnost
Větvení
- Základem je příkaz
if - else
, ostatní příkazy pro větvení urychlují nebo zpřehledňují zápis- Bez větvení nelze vytvářet ani jednoduché užitečné programy s výjimkou jednorázových výpočtů
Podmíněný příkaz (příkaz if – else)
- V závislosti na splnění podmínky se provede buď jedna, nebo druhá část programu
- Tyto části se často nazývají „větve“
- Podmínka
- Logický výraz, jehož výsledkem je (booleovská hodnota) buď
true
(podmínka je pravdivá, je splněná) nebofalse
(podmínka není pravdivá, není splněná) - Uvádí se bezprostředně za klíčové slovo
if
- Je vždy uzavřena do kulatých závorek „(“ a „)“
- Může obsahovat relační operátory (operátory pro porovnání)
„<“, „>“, „<=“, „>=“, „!=“, „==“
- Může se skládat z více logických výrazů, které jsou spojeny logickými operátory
„&&“
(„a zároveň“, konjunkce) nebo„||“
(„nebo“, disjunkce)- Bez ohledu na komplikovanost a délku podmínky, jejím výsledkem je VŽDY hodnota
true
nebofalse
- Bez ohledu na komplikovanost a délku podmínky, jejím výsledkem je VŽDY hodnota
- Úplný podmíněný příkaz (
if - else
)- Pokud je podmínka splněna (její hodnota je
true
), provede se první část kódu (uvedená bezprostředně za podmínkou) – „větevif
“ - Pokud podmínka není splněna (její hodnota je false), provede se druhá část kódu – „větev
else
“
- Pokud je podmínka splněna (její hodnota je
- Neúplný podmíněný příkaz (
if
)- Pokud je podmínka splněna (její hodnota je
true
), provede se část kódu uvedená bezprostředně za podmínkou - Pokud podmínka není splněna (její hodnota je
false
), neprovede se nic
- Pokud je podmínka splněna (její hodnota je
- Vnořený příkaz
if
- Příkaz
if
může v sobě obsahovat další příkazif
, ten zase další atd. - Úroveň zanoření není omezena
- Příkaz
- Příkaz
else if
- Kromě vnořování je možné využít příkaz
else if
, kdy po klíčovém slově else bezprostředně následuje další příkazif
- Běžně se využívá
- Možnost reagovat na více podmínek
- Možnost závěrečné
else
větve, která se provede, pokud žádná podmínka nebyla splněna - Vždy se provede maximálně jedna větev (nebo žádná, pokud chybí závěrečné
else
a žádná podmínka není splněná)
- Kromě vnořování je možné využít příkaz
- Logický výraz, jehož výsledkem je (booleovská hodnota) buď
Přepínač (příkaz switch)
- Umožňuje několikanásobné větvení programu na základě hodnoty jedné proměnné
- Proměnná může být typ celočíselný datový typ (
int, byte, short, long
) nebochar, String
a výčtový datový typ
- Proměnná může být typ celočíselný datový typ (
- Lze plně nahradit příkazy
if – else
- Není nutné ho používat příliš často, je možné nepoužívat ho vůbec
- Je ale minimálně dobré vědět, jak funguje, když ho použije někdo jiný
- Každá větev (začínající klíčovým slovem
case
) může být ukončena příkazembreak;
switch (proměnná) {
case konstanta1:
příkaz11;
příkaz12;
…
break;
case konstanta2:
příkaz21;
příkaz22;
…
break;
default:
příkazN1;
příkazN2;
…
break;
}
- Sémantika příkazu
switch
- Nalezne se konstanta odpovídající hodnotě proměnné (nebo vypočtené hodnotě výrazu, pokud je místo proměnné výraz)
- Provedou se všechny příkazy v této větvi
- Pokud je větev ukončena příkazem
break;
, skočí se na konec přepínače, pokračuje se dalším příkazem za přepínačem- Pokud větev příkazem
break;
ukončena není, pokračuje se s příkazy další větve - Zdroj častých chyb vedoucí k neočekávanému chování programu
- Umožňuje provést stejnou akci pro více hodnot
- Pokud větev příkazem
- Pokud není nalezena konstanta odpovídající hodnotě proměnné, provedou se příkazy větve
default
- Příkaz
break;
za větvídefault
je zbytečný, protože po dokončení posledního příkazu této větve příkazswitch
končí v každém případě, ale většinou se uvádí
- Příkaz
- POZOR! – Nikdy nekombinujte použití příkazu
if - else
a příkazuswitch
, značně to znepřehledňuje kód
Ternární operátor
- Umožňuje přiřazení v závislosti na podmínce
- Syntaxe
(podmínka) ? výrazTrue : výrazFalse;
- Podmínka je libovolný logický výraz s výsledkem
true
nebofalse
(stejně jako v příkazu if) - Výrazy jsou libovolné výrazy, jejichž výsledek je stejného datového typu
- Pro přehlednost dávat mezery okolo „?“ a „:“
- Podmínka je libovolný logický výraz s výsledkem
- Sémantika
- Pokud je podmínka splněná (
true
), vrátívýrazTrue
- Pokud podmínka není splněná (
false
), vrátívýrazFalse
- Ternární operátor vždy vrací hodnotu a nelze použít jako příkaz
- Hodnota musí být přiřazena do proměnné nebo jinak použita, např. může být součástí složitějšího výrazu
- Pokud je podmínka splněná (