Úloha 5 – Refaktoring aritmetiky a cyklů – zkrácené zápisy

Stránky: Moodle ZČU
Kurz: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Kniha: Úloha 5 – Refaktoring aritmetiky a cyklů – zkrácené zápisy
Vytiskl(a): Nepřihlášený host
Datum: neděle, 18. října 2026, 07.34

Úvod do úlohy

Posledním krokem v procvičování práce s aritmetickými operátory bývá refaktoring kódu – tedy jeho úprava tak, aby byl kratší, přehlednější a efektivnější. Programátor totiž nemusí vždy psát složité podmínky, když stejný výsledek lze dosáhnout jediným aritmetickým výrazem. Stejně tak místo „ručního“ sčítání v cyklech můžeme využít inkrementační operátory (++, +=). Znalost precedence a správné práce s operátory nám pak pomůže vyhnout se nejednoznačným nebo chybovým zápisům – zejména u typové konverze v JavaScriptu, kde operátor + může znamenat jak sčítání čísel, tak spojování řetězců.

Schopnost zjednodušovat kód pomocí operátorů je důležitá nejen z hlediska čitelnosti, ale i výkonu a údržby programu.


Teorie a principy

  1. Nahrazení podmínek aritmetikou

    • Místo if/else můžeme využít aritmetiku nebo logické operátory.

    • Například if (x % 2 === 0) a = 1; else a = 0; lze nahradit výrazem a = (x % 2 === 0) ? 1 : 0; nebo dokonce a = 1 - (x % 2);.

  2. Inkrementace a dekrementace

    • Operátor ++ zvyšuje hodnotu proměnné o 1.

    • Operátor += n zvyšuje hodnotu o n.

    • To nám šetří zápisy typu i = i + 1;.

  3. Jednoznačnost zápisu

    • Operátor + je dvojího druhu: číselné sčítání a spojování řetězců.

    • Pokud sčítáme proměnné neznámého typu, je vhodné použít Number(x) nebo String(x) pro jasnou konverzi.

    • Př.: alert("Součet: " + (a + b)); – závorky jsou nutné, jinak by JavaScript spojoval řetězec s číslem postupně a mohl by vyjít neočekávaný výsledek.


Praktické příklady kódu

Původní neefektivní fragment

Refaktorovaná verze

Oprava nejednoznačného +


Typické chyby / záludnosti

  • Zbytečné podmínky – studenti často používají if/else i tam, kde by stačil aritmetický trik.

  • Zapomenutí na inkrementaci – zápis i = i + 1; je funkční, ale i++ je stručnější a srozumitelnější.

  • Chybná precedence + – bez závorek se snadno stane, že JavaScript nejdříve spojí řetězec a až pak provede sčítání.

  • Implicitní konverze typů – kombinace čísel a řetězců může vést k neočekávaným výsledkům.


Shrnutí

  • Aritmetické operátory mohou nahradit složité podmínky a zjednodušit kód.

  • Inkrementační (++, +=) a dekrementační (--, -=) operátory šetří zápis a zvyšují čitelnost.

  • Operátor + má dvojí význam – vždy hlídejte typy operandů a používejte závorky či konverze.

  • Refaktoring je důležitý krok k psaní kódu, který je kratší, jasnější a méně náchylný k chybám.

Úloha

Zadání (kontext úlohy)

Máš krátký program, který vypisuje součet dvou čísel a současně používá cyklus k výpisu proměnné.
Tvým úkolem je kód zjednodušit – využít aritmetické a inkrementační operátory, aby byl kratší a jasnější.


Cíl úlohy

Procvičíš si refaktoring kódu – nahrazení zbytečných podmínek a dlouhých zápisů úspornějšími operátory (++, +=, závorky u +).


Vstupní podmínky
  • Pracuješ pouze s nově vytvořeným souborem script.js.


Požadovaný výstup
  1. Ulož do dvou proměnných dvě libovolná čísla.

  2. Vypiš jejich součet do konzole tak, aby se nespojily do řetězce – musí vyjít číselný součet.

  3. Vytvoř cyklus, který proběhne od 0 do 5.

    • Použij inkrementační operátor ++ místo zápisu i = i + 1.


Doplňující pokyny
  • Otestuj rozdíl mezi:

    a vysvětli, proč první varianta vede ke spojení textu a čísel, zatímco druhá dává správný číselný součet.

  • Pokud si nejsi jistý, použij závorky pro jednoznačný výsledek.

Řešení úlohy

Co je zde splněno

  • Do dvou proměnných jsou uložena libovolná čísla.

  • Ukázán rozdíl mezi spojením řetězců a číselným součtem ("Součet: " + a + b vs. "Součet: " + (a + b)).

  • Výsledek součtu je správně vypisován do konzole.

  • Použit cyklus for od 0 do 5 s inkrementačním operátorem i++.

Poznámky

  • Vždy když kombinujeme text a čísla, je dobré obalit číselný výpočet závorkami, aby se neprovedlo nechtěné řetězcové spojení.

  • Operátor ++ je kratší a přehlednější než i = i + 1.