Funkce

Doba čtení: cca 2 min

Funkce je pojmenovaný blok kódu, který lze spustit kdykoli a opakovaně. Díky funkcím píšeš kód jednou a voláš ho na více místech – to je základ přehledného a udržovatelného JavaScriptu.

Deklarace funkce

Základní způsob vytvoření funkce:

function pozdrav() {
  console.log('Ahoj!');
}

// Volání funkce
pozdrav();   // Vypíše: Ahoj!

Funkce se vytvoří klíčovým slovem function, za nímž následuje jméno, závorky a tělo funkce ve složených závorkách.

Parametry a argumenty

Funkce může přijímat vstupní hodnoty – parametry. Při volání funkce jim předáváš konkrétní hodnoty – argumenty:

function pozdravJmenem(jmeno) {
  console.log('Ahoj, ' + jmeno + '!');
}

pozdravJmenem('Zdeněk');   // Ahoj, Zdeněk!
pozdravJmenem('Marie');    // Ahoj, Marie!

Funkce může mít více parametrů oddělených čárkou:

function secti(a, b) {
  console.log(a + b);
}

secti(3, 5);   // 8

Návratová hodnota – return

Funkce může vrátit výsledek pomocí klíčového slova return. Výsledek pak lze uložit do proměnné nebo použít v dalším výpočtu:

function secti(a, b) {
  return a + b;
}

const vysledek = secti(3, 5);
console.log(vysledek);   // 8

// Nebo přímo
console.log(secti(10, 20));   // 30

Po klíčovém slově return funkce okamžitě skončí – žádný kód za ním se nespustí.

Funkce jako výraz (function expression)

Funkci lze uložit do proměnné. Takové funkci se říká funkční výraz:

const pozdrav = function(jmeno) {
  return 'Ahoj, ' + jmeno;
};

console.log(pozdrav('Zdeněk'));   // Ahoj, Zdeněk

Šipková funkce (arrow function)

Moderní zkrácený zápis funkce pomocí šipky =>. Je stručnější a dnes velmi běžný:

// Klasická funkce
function secti(a, b) {
  return a + b;
}

// Šipková funkce
const secti = (a, b) => a + b;

// Šipková funkce s více řádky
const sectiAVypis = (a, b) => {
  const vysledek = a + b;
  console.log(vysledek);
  return vysledek;
};

Tip od Zdeňka

Zdeněk radí: Funkce by měla dělat jednu věc a dělat ji dobře. Pokud název funkce obsahuje spojku „a“ (nactiDataAZobrazVysledky()), je to signál, že by se měla rozdělit na dvě. Menší funkce se lépe testují, lépe čtou a lépe opravují. A vždy piš popisný název – prepnoutRezim() je lepší než toggle() nebo f1().