Ú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
undefineduvnitř 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. (Pronullse 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
nullaundefined: default se neaktivuje přinull. -
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:
-
Přepiš funkci tak, aby měla výchozí hodnoty přímo v podpisu (bez vnitřních kontrol na
undefined). -
Před funkcí napiš krátký dokumentační komentář: co funkce dělá, význam parametrů, co vrací.
-
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.
-
-
Zavolej funkci třikrát s různými kombinacemi argumentů (včetně vynechaných) a výsledky vypiš pomocí
console.log. -
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
letneboconst(nikdyvar). -
V podmínkách porovnávej explicitně:
if (formalni == true)(ekvivalent jeif (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== undefineduvnitř. -
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.