The English encyclopedia Allmultimedia.org will be launched in two phases.
The final launch of the Allmultimedia.org will take place on February 24, 2026
(shortly after the 2026 Winter Olympics).

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