Definícia
Funkcia je samostatný, pomenovaný blok kódu navrhnutý na vykonávanie jedinej, dobre definovanej úlohy. Namiesto opakovaného písania tej istej logiky na rôznych miestach programu ju raz definuješ ako funkciu a potom ju voláš (spúšťaš) vždy, keď ju potrebuješ.
Funkcie sú jedným z najdôležitejších nástrojov na písanie čistého a udržiavateľného kódu.
Definícia a volanie funkcie
DEFINUJ pozdrav(menoOsoby):
VYPIS "Ahoj, " + menoOsoby + "!"
pozdrav("Alica") # Výstup: Ahoj, Alica!
pozdrav("Bob") # Výstup: Ahoj, Bob!
Kľúčové slovo DEFINUJ uvádza funkciu. Všetko odsadené pod ním je telo funkcie — kód, ktorý sa vykoná pri každom volaní. Meno v zátvorkách (menoOsoby) je parameter.
Parametre a návratové hodnoty
Parametre sú premenné uvedené v definícii funkcie, ktoré pri volaní funkcie dostanú vstupné hodnoty. Skutočné hodnoty, ktoré sa odovzdajú pri volaní, sa nazývajú argumenty.
Návratové hodnoty sú hodnoty, ktoré funkcia odošle späť kódu, ktorý ju zavolal.
DEFINUJ sucet(a, b):
vysledok = a + b
VRAT vysledok
celkom = sucet(3, 5) # celkom je 8
celkom = sucet(10, 20) # celkom je 30
Funkcia nemusí vracať hodnotu — niektoré funkcie len vykonajú akciu (napríklad vypíšu správu) bez toho, aby produkovali výsledok.
Pojmy „parameter" a „argument" sa v bežnej reči často používajú zameniteľne, ale v prísnom zmysle: parameter je premenná v definícii funkcie, kým argument je skutočná hodnota odovzdaná pri volaní funkcie.
Prečo funkcie znižujú opakovanie
Predstav si program, ktorý musí vypočítať obsah obdĺžnika na piatich rôznych miestach. Bez funkcií:
obsah1 = 4 * 7
obsah2 = 10 * 3
obsah3 = 6 * 6
# ... a tak ďalej, s rovnakým vzorcom opakovaným stále znovu
S funkciou:
DEFINUJ obsahObdlznika(sirka, vyska):
VRAT sirka * vyska
obsah1 = obsahObdlznika(4, 7)
obsah2 = obsahObdlznika(10, 3)
obsah3 = obsahObdlznika(6, 6)
Teraz vzorec existuje na presne jedinom mieste. Ak potrebuješ zmeniť logiku, zmeníš ju raz a oprava sa prejaví všade.
Tento princíp — písať každý kúsok logiky len raz — sa nazýva DRY (Don't Repeat Yourself — Neopakuj sa).
Dobre napísaná funkcia by mala robiť presne jednu vec. Ak sa ocitneš pomenovávať funkciu niečím ako vypocitajAVypisAUloz, je to signál, že by sa pravdepodobne mala rozdeliť na tri samostatné funkcie.
Cvičné príklady
Aký je rozdiel medzi parametrom a argumentom?
Zobraziť odpoveď
Čo robí príkaz return (vrátiť)?