Funkce v programovacích jazycích mají různé fory a vlastností, ale všechny mají určitý vstup a výstup. Důvody zavedení funkcí jsou zejména:
- zvýšení přehlednosti kódu,
- znovupoužití kódu,
- jednodušší úpravy a opravy prováděné na jednom místě,
- zjednodušení ladění.
Funkce jsou hlavními „stavebními kameny“ každého programu. Funkce nejčastěji používáme k uzavření části kódu (několika instrukcí, či algoritmu) do speciálně pojmenovaného bloku, který napíšeme jednou a potom jej můžeme opakovaně volat a využívat. Princip, která nám říká, abycho nepsali týtéž věci vícekrát má v programování vlastní pojmenování a označuje se jako DRY (don't repeat yourself).
Funkce v programovacím jazyce není tou samou věcí, jak ji chápou matematici. Pohled na funkci jako matematickou funkce se uplatňuje zejména ve funkcionálním paradigmatu.
Vstup funkce
Vstupní data funkce nazýváme argumenty a výstup návratovou hodnotou. Samotná funkce pak tyto argumenty zpracovává a využívá ve výpočetním procesu. Důležitá úloha argumentů funkcí je, že nám umožňují neduplikovat podobný kód. Bylo by zbytečné psát funkce, které se liší jenom v hodnotě proměnné. Jako např.
function dveNadruhou() {
return 2*2;
}
function petNadruhou() {
return 5*5;
}
K tomuto účelu mají funkce argumenty, které ji zobecňují (generalizují).
function nadruhou(x) {
return x*x;
}
Druhy funkcí
Často rozlišujeme různé druhy funkcí
Procedura
Jde o funkci, která nemá nemá návratovou hodnotu hodnotu popř. vrací typ reprezentující nic (void
).
Metoda
V objektovém programování se funkce v objektu nazývají metody. Tyto funkce mají přístup ke členským proměnným objektu.
Predikátová funkce
Pojmenování vychází z logiky, kde pracujeme s výroky o kterých můžeme rozhodnout zda platí nebo neplatí. Funkce, jejiž návratový hodnota je typu boolean (true
/false
) tedy dává odpověď typu Ano a Ne.
Příkladem jsou funkce ve standardních knihovnách isalpha
a isdigit
.
Vlastnosti funkcí
Čistá funkce
Častěji se setkáte s označení pure function. Jde o funkci, která produkuje na zadaný vstup vždy stejný výsledek a nemá vedlejší efekty (side-efekty). Příkladem funkce se side-efektem je např.
- funkce printChar vypisující postupně znaky z bufferu
- funkce, modifikující globální proměnnou
- operátor inkrementace a dekrementace, ++i
V čistě funkcionálním jazyku jako je třeba Haskell jsou všechny funkce čisté.
Funkce vyššího řádu
Je funkce, která dělá alespoň jednu z následujících vlastností:
- dovoluje mít funkci jako argument,
- funkci může mít jako návratovou hodnotu.
Všechny ostatní funkce jsou funkce prvního řádu.