113 lines
6.4 KiB
Markdown
113 lines
6.4 KiB
Markdown
|
# Ří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říkaz ```if - 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
|
|||
|
|
|||
|
### 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á) nebo ```false``` (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``` nebo ```false```
|
|||
|
- Ú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ětev ```if```“
|
|||
|
- Pokud podmínka není splněna (její hodnota je false), provede se druhá část kódu – „větev ```else```“
|
|||
|
- 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
|
|||
|
- Vnořený příkaz ```if```
|
|||
|
- Příkaz ```if``` může v sobě obsahovat další příkaz ```if```, ten zase další atd.
|
|||
|
- Úroveň zanoření není omezena
|
|||
|
- 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říkaz ```if```
|
|||
|
- 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á)
|
|||
|
|
|||
|
#### 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```) nebo ```char, String``` a výčtový 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říkazem ```break;```
|
|||
|
|
|||
|
```java
|
|||
|
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 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říkaz ```switch``` končí v každém případě, ale většinou se uvádí
|
|||
|
- POZOR! – Nikdy nekombinujte použití příkazu ```if - else``` a příkazu ```switch```, 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``` nebo ```false``` (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 „:“
|
|||
|
- 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
|
|||
|
|