A függvények

A függvényekről már volt szó, de bevallom, kicsit lazán magyaráztam. No majd most! Először is, kicsit felejtsd el a függvény matematikai értelmét tíz percre!

A függvény olyan utasításblokk, aminek nevet adhatunk, és a nevét bárhol leírva az A-star végrehajta a függvényt. Ennyi.

Emlékszel, hogy az előző oldalon az S morzézásához háromszor kellett leírni a led be-ki kapcsolását. Mi lenne, ha csinálnánk egy ti no meg mindjárt egy ta nevű függvényt, amiben előadjuk a rövid, meg a hosszú villantást?

void ti() {
    digitalWrite(13, HIGH); 
    delay(100);
    digitalWrite(13, LOW); 
    delay(100);  
}

Hogy néz ki egy függvény megadása?

Fú, hogy néz ez ki? A logika a következő:

eredményTípusa függvényneve(paraméterTípus paraméterNév...) {
    utasításblokk
}

Jelenleg a függvényünk semmit nem számol. Nem megy bele paraméter, nincs eredménye sem, ezért az eredmény típusa void ami azt jelenti, hogy "semmi" nem jön ki innen (vagy szó szerint: néma).

Mivel nincsenek paraméterek se, ezért a paramétereket felsoroló zárójeles rész belseje is üres.

De akkor a setup(), meg a loop() is? Igen, azok is függvények. Amikor az A-star elindul, meghívja a setup() függvényt, aztán utána a loop()-ot amíg ki nem kapcsolod, újra és újra.

Hogy néz ki egy függvény használata?

Egyszerűen le kell írni a nevét, és utána zárójelben a paramétereket. Mivel ennek nincs paramétere, ezért a zárójel belseje üres lesz:

ti();

Hát ez azért nem tűnik nagyon nehéznek! Eszedbe jutott, hogy Te már használtál függvényeket? Például a delay(100) is egy függvényhívás volt, és itt a 100 a paraméter. Mint minden utasítás végére, a függvényhívás végére is pontosvesszőt kell tenni.

A paraméter még mindig nem a félelem mértékegysége. A paraméter csupán azt jelenti, hogy a függvény kap valami adatot, ami befolyásolja a függvény működését - a delay például más számtól más ideig várakozik.

Rakjuk össze!

void setup() {
    pinMode(13, OUTPUT);
}

void ti() {
    digitalWrite(13, HIGH); 
    delay(100);
    digitalWrite(13, LOW); 
    delay(100);  
}

void ta() {
    digitalWrite(13, HIGH); 
    delay(200);
    digitalWrite(13, LOW); 
    delay(100);  
}


void loop() {
    // ez lesz az S
    ti();
    ti();
    ti();
    delay(200);

    // ez lesz az O
    ta();
    ta();
    ta();
    delay(200);

    // ez lesz az S
    ti();
    ti();
    ti();
    delay(200);

    delay(200);  

}

Hm, sokkal rövidebb lett! Sőt, még az is látszik, hogy mikor van ti, meg tá, így a programunk olvashatóbb, emiatt könnyebben megérthető és bővíthető lett! Nem rossz, ugye?

Mit tanultunk ebből?

A függvényekkel sokszor használt, vagy bonyolult programdarabokat lehet kiemelni, így egyetlen nagyon nagy utasításblokk helyett több picit tudunk használni.