FAV-ZCU/KIV PPA1/2. Řídicí struktury.md

6.4 KiB
Raw Permalink Blame History

Ří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;
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