Zápisky pro předmět IKT na GJS.

Funkce a události

Zápisky vedla Lucie R.

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é, když chceme vyřešit nějaký opravdový počítačový problém. Každá funkce by měla dělat nějaký dobře srozumitelný úkol. Může přitom volat různé jiné funkce (tady například blikni volá digitalWrite), takže sama o sobě je docela stručně napsaná.

Události

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(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 to stalo");
}

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 to stalo");
}

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?