NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 15 - Funkce v JavaScriptu

V minulé lekci, Textové řetězce v JavaScriptu do třetice - Split a join, jsme si uvedli metody split() a join() na textových řetězcích.

V dnešním tutoriálu základů JavaScriptu si ukážeme, jak vytvářet vlastní funkce. Vysvětlíme si, co to jsou parametry funkce nebo její návratová hodnota a ukážeme si anonymní funkci.

Funkce v JavaScriptu

Zatím jsme pouze používali funkce nebo metody, které již máme v JavaScriptu k dispozici. Není ovšem nic těžkého vytvořit si funkci vlastní. Rozdělování skriptů do funkcí má následující výhody:

  • Přehlednost – Pokud se nějaký algoritmus skládá z více kroků, vytvoříme funkci pro každý tento krok a funkce potom voláme po sobě. Každá funkce tedy obsahuje jen to, co do ní patří. Kód se stává přehlednějším.
  • DRY – Zkratka označuje Don't Repeat Yourself, tedy neopakujte se. Jedná se o uznávaný programátorský princip, který odsuzuje duplicitní kód. Pokud chceme nějakou část kódu použít vícekrát, nemusíme ji opisovat, ale oddělíme ji do funkce. Poté pouze zavoláme jednu funkci na více místech programu. Když potom chceme v kódu něco opravit, nehledáme chybu na několika místech, ale opravíme ji jen v té jedné funkci.
  • Možnost použití knihoven – Funkce, které často používáme, můžeme vkládat do samostatných souborů, kterým se někdy říká knihovny. Pokud si vytvoříme např. knihovnu pro přihlašování uživatelů, můžeme ji potom jen vložit do jiného projektu, načíst a začít používat dané funkce, aniž bychom něco znovu programovali.

V dalších seriálech si ukážeme i jak členit funkce do objektů. Dosáhneme tím opravdu velmi čitelného kódu, který lze navíc snadno rozšiřovat.

Správný program by měl být poskládaný z několika kratších funkcí, neměl by vypadat jako dlouhá nudle kódu :)

Jednoduchá funkce

Vytvořme si úplně jednoduchou funkci, která pouze vypíše text:

function pozdrav() {
    document.write("Ahoj, vřele tě tu vítám!");
}

Funkci deklarujeme pomocí klíčového slova function. Za ním následuje název funkce a závorky. Tělo funkce, tedy to, co se provede po jejím zavolání, je poté vloženo do bloku ve složených závorkách. Funkci pojmenujeme podle toho, co dělá. Její název obsahuje sloveso v rozkazovacím způsobu.

Název funkce píšeme v JavaScriptu pomocí camelCase notace, tedy s malým písmenem na začátku, další slova v názvu funkce začínají velkým písmenem.

Jakmile funkci vytvoříme, můžeme ji volat:

function pozdrav() {
    document.write("Ahoj, vřele tě tu vítám!");
}

pozdrav();

Děláme to jednoduše napsáním jejího názvu a závorek. Zavoláním naší funkce dostaneme výstup:

Funkce v JavaScriptu
localhost

Funkce s parametry/argumenty

Funkce může mít také libovolný počet vstupních parametrů:

function pozdrav(jmeno) {
    document.write("Ahoj, vřele tě tu vítám " + jmeno + "!<br />");
}

Parametry píšeme mezi kulaté závorky za názvem funkce a poté s nimi můžeme pracovat v těle funkce. Zde jsme přidali parametr jmeno a ten potom využili při vypisování textu. Nyní můžeme při volání funkce zadat konkrétní jméno, které se použije pro každý jednotlivý výstup:

pozdrav("Karle");
pozdrav("Davide");
pozdrav("Mařenko");

Vypisovaný řetězec se nám upraví vždy podle konkrétního parametru předaného při volání dané funkce:

Funkce v JavaScriptu
localhost

Funkce s více parametry by vypadala podobně:

function pozdrav(jmeno, textPozdravu) {
    document.write(textPozdravu + " " + jmeno + "!<br>");
}

Jednotlivé parametry od sebe oddělíme čárkou. Při volání funkce dokonce můžeme některé parametry vynechat:

pozdrav("Petře");
pozdrav("Jano", "Ahoj");

Parametry, které neuvedeme při volání funkce, budou mít uvnitř funkce hodnotu undefined:

Funkce v JavaScriptu
localhost

Při prvním volání funkce předáváme pouze jeden parametr. Druhý parametr neuvádíme, proto bude mít hodnotu undefined. Při druhém volání funkci předáváme oba parametry. V prvním parametru je jméno osoby, kterou chceme pozdravit, druhý parametr pak obsahuje text pozdravu.

Nastavení výchozí hodnoty parametru funkce

Abychom se vyvarovali hodnoty undefined při nezadání parametru, můžeme mu při deklaraci funkce nastavit výchozí hodnotu:

function pozdrav(jmeno, textPozdravu = "Dobrý den") {
    document.write(textPozdravu + " " + jmeno + "!<br>");
}
pozdrav("Petře");
pozdrav("Jano", "Ahoj");

Při volání funkce s jedním parametrem bude nyní použit výchozí pozdrav Dobrý den:

Funkce v JavaScriptu
localhost

Návratová hodnota funkce

Funkce může také vrátit hodnotu, se kterou lze později pracovat. K tomu slouží příkaz return, za nímž uvedeme hodnotu, kterou má funkce vrátit:

function pozdrav(jmeno) {
    return "Ahoj, vřele tě tu vítám " + jmeno + "!";
}

Funkce pozdrav() vrátí pozdrav i se jménem, které jí předáme. Nyní můžeme vrácenou hodnotu například uložit do proměnné a vypsat ji velkými písmeny:

let text = pozdrav("Karle");
document.write(text.toUpperCase())

Výsledek:

Tvoje stránka
localhost

Výhoda funkcí spočívá v jejich přehlednosti a efektivitě. Umožňují nám napsat určitou část kódu pouze jednou a následně ji prostřednictvím funkce snadno použít opakovaně – klidně i stokrát na různých místech skriptu. Když se rozhodneme funkci změnit, provedeme změnu jen na jednom místě a tato změna se projeví všude, což značně snižuje riziko chyb. V příkladu, kde zdravíme Karla, Davida a Mařenku, nám stačí změnit text pozdravu ve funkci a změní se ve všech třech voláních. Nemít kód ve funkci, museli bychom přepisovat tři věty a v nějaké bychom mohli udělat chybu.

Uložení funkce do proměnné

JavaScript se liší od jiných jazyků tím, jak pracuje s funkcemi. Funkce zde umí ještě více, než jsme si ukázali. Pokud si vzpomínáme, v lekci Úvod do JavaScriptu jsme mluvili o tzv. funkcionálním paradigmatu. Jedná se o specifický styl programování a myšlení pomocí funkcí. Ve skutečnosti jsou všechny funkce v JavaScriptu vnitřně proměnné. Funkci můžeme uložit do běžné proměnné a z této proměnné ji později volat:

function pozdrav(jmeno) {
    document.write("Ahoj, vřele tě tu vítám " + jmeno + "!");
}

let promennaSFunkci = pozdrav;

Funkci jsme vytvořili tak, jak jsme zvyklí a následně ji uložili do proměnné promennaSFunkci. Všimněme si však, že na rozdíl od volání funkce zapisujeme při jejím ukládání pouze název bez závorek – ukládáme totiž samotnou funkci, nikoli výsledek jejího volání, jak tomu bylo v předchozích příkladech. Následně můžeme funkci zavolat přes proměnnou, do které jsme ji uložili. Pro zjednodušení si můžeme představit, že jsme funkci dali "přezdívku", a proto je jedno, zda ji "oslovíme" jejím původním jménem nebo použijeme přezdívku ve formě názvu proměnné:

promennaSFunkci("Karle");

Výstup bude stejný, jako kdybychom zavolali pozdrav("Karle");:

Tvoje stránka
localhost

Anonymní funkce

U jednorázových úkolů, například při reakci na události v prohlížeči, často není nutné vytvářet samostatnou funkci se jménem. Místo toho můžeme funkci uložit do proměnné rovnou:

let promennaSFunkci = function(jmeno) {
    document.write("Ahoj, vřele tě tu vítám " + jmeno + "!");
}

Tato funkce sama o sobě nemá název, proto ji nazýváme anonymní funkcí. Máme pouze název proměnné, ve které je funkce uložená.

Anonymní funkce si můžeme představit jako nástroj vytvořený na míru pro konkrétní úkol, který už poté pravděpodobně nebudeme znovu potřebovat. Volání přes proměnnou proběhne stejně, jako při uložení pojmenované funkce:

promennaSFunkci("Karle");

JavaScript "vidí" pojmenované funkce předem díky tzv. hoistingu, takže je můžeme volat odkudkoli v kódu, i před jejich deklarací. U anonymních funkcí uložených do proměnných to však neplatí, a proto musí být volány až po jejich deklaraci.

Funkce definované oběma ukázanými způsoby můžeme také předávat jako parametr dalším funkcím. To si ukážeme zejména při obsluze událostí v dalších lekcích.

V následujícím cvičení, Řešené úlohy k 13.-15. lekci JavaScriptu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 859x (4.6 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

Předchozí článek
Textové řetězce v JavaScriptu do třetice - Split a join
Všechny články v sekci
Základní konstrukce jazyka JavaScript
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 13.-15. lekci JavaScriptu
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
1305 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity