Funkce a události

Definice funkce

Když chceme nějaký úkol v programu opakovat často, můžeme si na něj napsat funkci a tu pak jen zavolat. Funkce je v programu definovaná jen jednou a ta definice začíná slovem function. Potom ji v programu můžeme použít kolikrát chceme.

function blikni() {
    digitalWrite(2, true);
    for (var i = 0; i < 500; i += 1)
        var tohleMeNezajima = 0;
    digitalWrite(2, false);
    for (var i = 0; i < 500; i += 1)
        var tohleMeTakyNezajima = 0;
}

blikni();
blikni();
blikni();

Funkce jsou velice důležité, abychom měli v programu pořádek. Každá funkce by měla dělat nějaký zřetelný úkol, a nic dalšího.

Může přitom volat různé jiné funkce – tady například blikni volá digitalWrite. Když program šikovně rozdělíme do funkcí, bude stručný a dobře srozumitelný pro další lidi.

Události

V předchozí ukázce jsme nechávali program napočítat do 500, abychom ho zpomalili a blikání bylo viditelné.

Když chceme počítač nechat čekat, je docela pitomé ho kvůli tomu zaměstnávat počítáním oveček. Spíš bychom chtěli napsat, za jak dlouho se má náš kód spustit, a nechat počítač, ať mezitím odpočívá.

Kód, který se má za vteřinu spustit, zabalíme do funkce. Potom příkazem setTimeout(jméno_funkce, milisekundy) požádáme počítač, aby nám tu funkci spustil třeba za pět vteřin.

function budik() {
    console.log("Teď se spustil budík.");
}

setTimeout(budik, 5000);

Tento program počká pět vteřin a pak vypíše zprávu do konzole.

Cvičení: rozsvítit a zhasnout

Napište program pro ESP32, který po pěti vteřinách rozsvítí diodu a po dalších pěti vteřinách ji zhasne.

Jak zastavit časovač

Funkce setTimeout vrací číslo budíku, který nastavila. Stejné číslo pak můžeme předat funkci clearTimeout, abychom budík vypnuli.

function budik() {
    console.log("Teď se spustil budík.");
}

var cislo = setTimeout(budik, 5000);
clearTimeout(cislo);

Vyzkoušejte si, že když příkaz clearTimeout spustíte kdykoliv během těch pěti vteřin, zpráva v konzoli se nevypíše. Když ho spustíte později, už to samozřejmě nejde dohnat.

Cvičení: časovaná bomba

Napište program, který postupně napočítá od 10 do 1 a potom vypíše něco jako "prásk!" Jak se postaráte o to, aby počítání nepokračovalo v záporných číslech?