Úloha 4 – Refaktoring podpisu funkce a práce s parametry

Site: Moodle ZČU
Course: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Book: Úloha 4 – Refaktoring podpisu funkce a práce s parametry
Printed by: Nepřihlášený host
Date: Thursday, 22 October 2026, 8:43 AM

Úvod do úlohy

V reálných projektech často narazíme na funkce plné opakujících se „ochranných“ kontrol typu if (hodnota == undefined), které rozptylují pozornost a zhoršují čitelnost. Přitom mnoho z nich lze elegantně nahradit výchozími (default) parametry přímo v podpisu funkce. Tato sada úloh vás povede k identifikaci míst, kde je vhodné přidat výchozí hodnoty, upravit podpis funkce tak, aby jasně vyjadřoval očekávané vstupy, a doplnit krátké komentáře vysvětlující význam jednotlivých parametrů. Výsledkem bude čistší, čitelnější a robustnější kód.


Teorie a principy

  • Cíl refaktoringu: odstranit rozptýlené kontroly undefined uvnitř těla funkce a nahradit je konzistentními výchozími hodnotami v podpisu.

  • Sémantika podpisu: když jsou výchozí hodnoty v deklaraci, požadované a volitelné vstupy jsou viditelné na první pohled.

  • Pořadí parametrů: parametry s výchozími hodnotami dávejte spíše na konec, aby běžná volání nemusela vyplňovat zbytečné argumenty.

  • Chování při undefined: výchozí hodnota se použije, když argument chybí nebo je explicitně undefined. (Pro null se nepoužije.)

  • Čitelnost a údržba: krátký dokumentační komentář u každé funkce (co dělá, co znamenají parametry, co vrací) snižuje kognitivní zátěž a chyby.


Praktické příklady kódu

1) Před refaktoringem: rozptýlené kontroly undefined

2) Po refaktoringu: výchozí parametry v podpisu

3) Vzorový postup při návrhu podpisu funkce

Nejprve si ujasníme, které vstupy jsou skutečně povinné a které jen ladí chování funkce.

4) Refaktoring reálného úryvku – z formuláře

Před refaktoringem: mnoho drobných ochran uvnitř.

Po refaktoringu: čistý podpis s výchozími hodnotami a popisnými komentáři.


Typické chyby / záludnosti

  • Výchozí hodnoty roztroušené uvnitř těla: po refaktoringu by měly být v podpisu.

  • Nepopsané parametry: bez komentářů není jasné, co je povinné a co volitelné.

  • Nevhodné pořadí: povinné parametry na začátku, volitelné s defaulty na konci.

  • Záměna null a undefined: default se neaktivuje při null.

  • Obrana „napříč kódem“: stejné ochrany v mnoha funkcích – zvažte jednotnou výchozí hodnotu v podpisu nebo rozumnou „obalovou“ funkci.

  • Zbytečné if (param == undefined) po zavedení defaultu: bývá to relikt starší verze – odstranit.


Shrnutí – co si zapamatovat

  • Výchozí parametry pište přímo do podpisu: zlepší to čitelnost i spolehlivost.

  • Povinné vs. volitelné vstupy odlište pořadím a dokumentací.

  • Po zavedení defaultů odstraňte vnitřní kontroly na undefined.

  • Krátké komentáře u funkce vysvětlí význam parametrů a návratovou hodnotu.

  • Výsledkem je modulární, předvídatelný a snadno rozšiřitelný kód.

Úloha

Zadání (kontext úlohy):

Máš funkci, která skládá krátkou pozvánku na akci. Původně obsahuje několik „ochranných“ kontrol uvnitř těla. Tvým úkolem je upravit podpis funkce tak, aby potřebné výchozí hodnoty byly přímo v parametrech, a tím zjednodušit kód a zvýšit čitelnost.


Cíl úlohy:

Procvičit použití výchozích (default) parametrů v podpisu funkce místo roztroušených kontrol if (hodnota == undefined) uvnitř těla.
Dále si vyzkoušíš krátký dokumentační komentář a explicitní podmínku nad jednoduchou volbou stylu pozdravu.


Vstupní podmínky:

Pracuj v jednom souboru script.js.
Funkce má vracet jeden řádek textu s pozvánkou podle zadaných (nebo výchozích) hodnot.


Požadovaný výstup:
  1. Přepiš funkci tak, aby měla výchozí hodnoty přímo v podpisu (bez vnitřních kontrol na undefined).

  2. Před funkcí napiš krátký dokumentační komentář: co funkce dělá, význam parametrů, co vrací.

  3. Uvnitř funkce použij explicitní podmínku pro volbu stylu pozdravu:

    • pokud formalni == true, použij formální pozdrav,

    • jinak použij neformální pozdrav.

  4. Zavolej funkci třikrát s různými kombinacemi argumentů (včetně vynechaných) a výsledky vypiš pomocí console.log.

  5. Nikde v těle funkce nepoužívej if (param == undefined) – o to se postará podpis s výchozími hodnotami.


Doplňující pokyny:
  • Používej pouze let nebo const (nikdy var).

  • V podmínkách porovnávej explicitně: if (formalni == true) (ekvivalent je if (formalni)).

  • Parametry s výchozími hodnotami dej na konec podpisu, aby běžná volání byla stručná.

  • Text můžeš složit prostým řetězením nebo šablonovým literálem – zvol jeden styl a drž se ho.

Řešení úlohy

Co je zde splněno

  • Výchozí hodnoty přesunuty do podpisu funkce (misto = "bude upřesněno", formalni = false), žádné kontroly == undefined uvnitř.

  • Krátký dokumentační komentář vysvětluje účel, parametry i návratovou hodnotu.

  • Volba pozdravu pomocí explicitní podmínky if (formalni == true).

  • Tři volání s různými kombinacemi včetně vynechaných parametrů.

  • Jednotný styl výstupu pomocí šablonového literálu.

Vylepšení oproti začátečnické verzi

  • Použit funkční výraz se šipkovou funkcí pro stručnost.

  • Zachována explicitní podmínka dle zadání, ale kód je kompaktnější.

  • Stále platí: výchozí parametry na konci pro pohodlné volání.

Poznámky

  • Při potřebě přeskočit volitelný parametr a nastavit další (jako ve 3. volání) lze použít undefined, aby se aplikovala výchozí hodnota.