3

Vlastní funkce

Funkce jsou jednou z nejdůležitějších součástí programování. Všimněte si, jak moc vaše programy sestávají z volání různých funkcí. Nyní přichází ten správný čas k tomu, abychom začali vytvářet funkce vlastní.

Před tím je dobré si osvěžit několik základních pojmů. Pokud chceme funkci použít, říkáme, že ji takzvaně voláme. Například takto v JavaScriptu voláme funkci, která umocní první zadané číslo na druhé zadané číslo.

Math.pow(2, 3)

Této funkci jsme do kulatých závorek předali dva vstupy. Vstupům funkce se říká parametry. Funkci Math.pow jsme tedy předali dva parametry. Jakmile funkci zavoláme, ona provede nějaký výpočet a takzvaně vrátí výsledek. Výsledku říkáme výstup. Řekneme tedy, že volání funkce Math.pow s parametry 2 a 3 vrátí výstup 8.

Jak upéct vlastní funkci

Ve všech programovacích jazycích je již od začátku k dispozici mnoho funkcí. Často ale potřebujeme funkci, která dělá něco specifického, důležitého pouze pro náš program. Představme si například, že vyměřujeme pozemek a chceme spočítat plochu pozemku, který má tvar pravoúhlého trojúhelníka o šířce witdth a výšce height.

Pozemek

Naše funkce tedy bude mít dva vstupy - šířku a výšku. Ze školy si pamatujeme, že plochu spočítáme tak, že vynásobíme šířku výškou a vydělíme dvěma. Už tedy víme, co má funkce dělat a zbývá nám tento postup zapsat v JavaScritpu.

(width, height) => width * height / 2

Zápis funkce se dělí na definici vstupů (před šipkou) a tělo (za šipkou). Jako vstupy v kulatých závorkách vidíme dvě slova width a height. To jsou speciální proměnné, kterým říkáme argumenty. Pokud naší funkci zavoláme s nějakými parametry, například 6 a 3, JavaScript tyto hodnoty uloží do agrumentů. V těle funkce pak můžeme agrumenty použít jako normální proměnné pro náš výpočet.

Funkce

Nyní se tedy ukážeme, jak naší funkci zavolat. Důležité je si uvědomit, že funkce je hodnota jako každá jiná. Můžeme ji tedy uložit do proměnné podobně jako to děláme s čísly, řetězci apod.

const wage = 250;
const user = 'martin';
const area = (width, height) => width * height / 2;

Jakmile máme funkci uloženou v proměnné, můžeme jí zavolat známým způsobem.

area(6, 3);

Složitější funkce

Ne každá funkce je tak přímočará, jako výpočet obsahu. Často se stane, že potřebujeme ve funkci provést nějaké rozhodování, cyklus apod. Mějme například funkci, která nám vrátí absolutní hodnotu čísla. V takové funkci potřebujeme použít podmínky. Tělo funkce tedy bude obsahuje více příkazů a nevejde se nám na jeden řádek. V takovém případě může tělo funkce být blok kódu podobně jako u podmínek.

const abs = (x) => {
  if (x >= 0) {
    return x;
  } else {
    return -x;
  }
};

Všimněte si klíčového slova return, které ukončí běh funkce a vrátí zadaný výsledek.

Všimněte si, že tělo funkce může obsahovat mnoho příkazů. Je to jakýsi malý program. Proto se funkcím někdy historicky říká podprogramy-

Cvičení

1

Obsah elipsy

Tentokrát chceme spočítat plochu pozemku ve tvaru elipsy jako na obrázku.

Elipsa

Z matematiky víme, že známe li šířku a výšku elipsy, její obsah je polovina šířky krát polovina výšky krát číslo pí. Napište funkci elipseArea, která spočítá plochu pozemku dle zadané šířky a výšky. Číslo pí najdete v JavaScriptu v proměnné Math.PI.

2

Větší ze dvou čísel

Napište funkci jménem max2, který vrátí větší ze dvou zadaných čísel.

3

Python zaokrouhlování

Jak si možná pamatujete, v Pythonu funkce round zaokrouhluje k nejbližšímu sudému číslu, pokud je desetinná část čísla přesně 0.5. JavaScriptová funkce Math.round naopak provádí zaokrouhlování způsobem, na který jste zvyklí, tedy pro 0.5 vždy nahoru. Někomu by se po po Pythonovském zaokrouhlování mohlo stýskat. Napište funkci round, která zaokrouhluje čísla na celé jednotky podle následujících pravidel.

  1. Pokud je desetinná část menší než 0.5, zaokrouhlujeme dolů.
  2. Pokud je desetinná část větší než 0.5, zaokrouhlujeme nahoru.
  3. Pokud je desetinná část přesně rovna 0.5, zaokrouhlujeme k sudému číslu. Tedy například 3.5 se zaokrouhlí na 4, naopak 2.5 se zaokrouhlí na 2.

V tomto cvičení se vám mohou hodit funkce Math.floor nebo Math.trunc.

Bonusy

4

Větší ze tří čísel

Napište funkci jménem max3, který vrátí největší ze tří zadaných čísel.

5

Vlastní randint

V Pythonu jsme měli k dispozici krásnou funkci randint, která vygenerovala náhodné číslo v zadaném rozpětí. V JavaScriptu takovou funkci nemáme. Vytvořte tedy tuto funkci sami s použitím funkce Math.random. Pokud si věříte, napište funkci rovnou. Pokud tápete, následujte tyto kroky

  1. Nejdříve vyrobte funkci, která umí vygenerovat náhodné číslo mezi 0 a 5.
  2. Upravte vaší funkci tak, aby generovala náhodné číslo mezi 0 a zadaným vstupem.
  3. Upravte funkci dále tak, že obdrží dva vstupy min a max a číslo vygeneruje v těchto mezích.