Funkce (programování)
Z Multimediaexpo.cz
V programování je funkce část programu, kterou je možné opakovaně volat z různých míst kódu. Funkce může mít argumenty (též parametry) – údaje, které jí jsou předávány při volání – a návratovou hodnotu, kterou naopak vrací. Na rozdíl od funkce v matematice nemusí výsledek funkce v programu záviset jen na jejích argumentech – v průběhu svého běhu může samostatně získávat data z paměti nebo jiných vstupů a provádět i výstupní operace, takže návratová hodnota zdaleka nemusí být jejím jediným výsledkem (viz vedlejší účinek) a funkce také nemusí mít žádné formální parametry (typ. funkce vracející hodnotu stisknuté klávesy). Často nemusí funkce vracet žádnou hodnotu, potom se taková funkce může nazývat procedurou. V objektově orientovaném programování se funkce náležející nějaké třídě nazývají metodami.
Obsah |
Argumenty funkce
- formální argumenty (parametry) - udává jakého datového typu a počtu jsou jednotlivé argumenty funkce, některé programovací jazyky umožňují deklarovat funkce s proměnným počtem parametrů
- skutečné argumenty (parametry) - jsou to skutečné argumenty (výrazy) uvedené při volání funkce
Předávání argumentů
- volání hodnotou (call by value)
- volající provede vyhodnocení výrazu který je zadán jako argument funkce a výslednou hodnotu předá do volané funkce
- volání odkazem (call by reference)
- volající předá v argumentu funkce ukazatel nebo referenci na proměnou. Funkce může obsah této proměnné nejen číst, ale i modifikovat její obsah (viz vedlejší účinek). Často se pole jako argument funkce předává pomocí volání odkazem
- volání jménem (call by name)
- výraz v argumentu funkce se nevyhodnocuje a předá se do funkce tak jak je. Proto se ve funkci může tento argument vyhodnocovat vícekrát. Nejčastější použití je u symbolických maker
Ukázky v programovacích jazycích C a C++
void funkce1(void) { /* nějaký kód */ }
Tato funkce nevrací hodnotu a je volána: funkce1();
int funkce2(void) { return 5; }
Tato funkce navrací hodnotu (číslo 5) a funkci můžeme zavolat jako část příkazu: x + funkce2()
char funkce3 (int cislo) { char rada[] = {'P','U','S','C','P','S','N'}; return rada[cislo]; }
Tato funkce konvertuje číslo mezi 0 a 6 na počáteční písmeno dne v týdnu. Ukázka: 0 → 'P', 1 → 'U', …, 6 → 'N'.
Výsledek volání funkce může být přiřazen proměnné:
char pismeno_dne = funkce3(cislo);
.
void funkce4 (int* ukazatel_na_promennou) { (*ukazatel_na_promennou)++; }
Tato funkce nevrací žádnou hodnotu, ale modifikuje proměnnou, jejíž adresa je zadána v parametru funkce. Funkci lze volat:
funkce4(&promenna);
.
int (*funkce5(double (*F)(long b), int (*f)(void* c))) (void * v);
Tento řádek deklaruje funkci funkce5 (bez těla, jedná se o predeklaraci), která vrací ukazatel na funkci vracející integer a mající parametr typu nespecifikovaný ukazatel a má dva parametry: první je ukazatel na funkci vracející double (reálné číslo s dvojitou přesností) s parametrem typu long („dlouhé“ celé číslo), druhý je opět ukazatel na funkci, a to stejného typu jako funkce vracená, tedy vracející integer a mající parametr typu nespecifikovaný ukazatel.
Podobné zápisy se v běžných programech vyskytují zřídka, protože bývají zpřehledněny pomocí typedef
. Mohou se ale vyskytnout v chybové hlášce překladače nebo v automaticky generovaném zdrojovém kódu. Ekvivalentní definice pomocí typedef
zní:
typedef double F1(long); typedef int F2(void *); F2 * funkce5(F1*,F2*);
Ukázka v PHP
function funkce1($a,$b) { return($b['num']-$a['num']); }
V beztypových programovacích jazycích jako PHP je zápis funkce jednodušší: neuvádí se typy argumentů, jen názvy. Funkce předpokládá, že oba její argumenty jsou asociativní pole obsahující prvek num a vrátí rozdíl těchto prvků. Podobné funkce se často používají jako callback pro řazení, tedy předají se jako argument řadící funkci a ta je opakovaně volá na dvojice prvků řazeného pole.
Související články
Reference
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |