Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Funktiot

Funktio on itsenäinen ohjelman osa, joka tekee jonkin halutun tehtävän, se voi esimerkiksi laskea jonkin laskutoimituksen. Funktioiden avulla voidaan selkeyttää koodia, sillä ne eriyttävät tietyn toiminnon omaksi kokonaisuudekseen, jota voidaan tarvittaessa kutsua.

...

  • Toisaalta on olemassa valmiita kirjastofunktioita, jotka ovat kaikkien ohjelmoijien käytössä. Esim debugPrint.
  • Toisaalta jokainen ohjelmoija voi kirjoittaa funktioita omaan käyttöönsä.

Funktion kirjoittaminen

Funktion täydellinen nimi koostuu kolmesta asiasta:

...

Note

Funktiot kannattaa kirjoittaa task main():in yläpuolelle.

Funktiotyypit

Funktioita voidaan tehdä erilaisia:

Anchor
esim1
esim1

Esimerkki 1

Seuraavassa esimerkissä funktio laskee kartion tilavuuden, funktion alussa esitellään ne muuttujat (tietovarastot), joita ohjelma tarvitseeEsimerkissä on toteutettu funktio AjaEteenpain().

Code Block
void AjaEteenpain()
{
    motor[motorB] = 50; // Asetetaan moottori B 50% eteenpäin
    motor[motorC] = 50; // Asetetaan moottori C 50% eteenpäin
    wait1Msec(1000);    // Ajetaan eteenpäin 1 sekunti

    motor[motorB] = 0; // Pysäytetään moottori B
    motor[motorC] = 0; // Pysäytetään moottori C
}

Esimerkin mukainen funktio ajaisi moottoreita B ja C 50% teholla eteenpäin, jonka jälkeen pysäyttäisi moottorit.

Funktion kutsuminen

Funktiota kutsutaan muodossa funktion_nimi() ja sulkujen sisään tulevat mahdolliset parametrit.

Esim Esimerkin 1 funktion kutsuminen pääohjelmasta:

...

Note

Funktiota voidaan kutsua mistä tahansa ohjelmasta, myös funktiosta itsestään (kts. rekursio).

Anchor
esim2
esim2

Funktion parametrit

...

Funktioille voidaan myös välittää tietoa kutsun yhteydessä. Tämä tapahtuu funktion parametrien välityksellä. Jos funktiolle on määritelty parametreja, ne on pakko antaa funktiota kutsuttaessa. Anchoresim2esim2

Esimerkki 2

Code Block
// Funktiolle annetaan tieto kuinkan kauan sen tulee ajaa eteenpäin aika-parametrin avulla
void AjaEteenpain(int aika)
{
    motor[motorB] = 50;  // Asetetaan moottori B 50% eteenpäin
    motor[motorC] = 50;  // Asetetaan moottori C 50% eteenpäin
    wait1Msec(aika);     // Ajetaan eteenpäin aika-parametrin osoittama aika

    motor[motorB] = 0;   // Pysäytetään moottori B
    motor[motorC] = 0;   // Pysäytetään moottori C
}

task main()
{
    AjaEteenpain(500);   // Ajetaan eteenpäin ½ sekuntia.
}

Edellä oleva funktio ottaa parametrikseen yhden kokonaisluvun, ajan.

Anchor
esim3
esim3

Esimerkki 3

Code Block
void AjaEteenpain(int aika, int nopeus)
{
    motor[motorB] = nopeus; // Asetetaan moottori B nopeus-parametrin määrän eteenpäin
    motor[motorC] = nopeus; // Asetetaan moottori C nopeus-parametrin määrän eteenpäin
    wait1Msec(aika);        // Ajetaan eteenpäin aika-parametrin osoittama aika

    motor[motorB] = 0;      // Pysäytetään moottori B
    motor[motorC] = 0;      // Pysäytetään moottori C
}

task main()
{
    AjaEteenpain(500, -25); // Annetaan parametrien arvoiksi sopivat luvut.
}

Edellä oleva funktio ottaa parametreikseen kaksi kokonaislukua, ajan ja moottoreiden nopeuden.

Funktion paluuarvo

Funktio voi päätyttyään palauttaa kutsujalleen tietoa. Tieto palautetaan return-käskyllä. Funktiossa voi olla useita return-lauseita sopivissa kohdissa. Jokainen niistä poistuu funktiosta siinä kohdassa missä return on. Funktion nimen edessä oleva tyyppi määrää paluuarvon tyypin ja siksi return-lauseen perässä olevan arvon pitää olla samaa tyyppiä (joko vakio tai muuttuja).

Anchor
esim4
esim4

Esimerkki 4

Code Block
int SensorinArvo()
{
    int arvo = SensorValue[S1];
    return arvo;
}

task main()
{
    int sensoriLukema;                // Esitellään muuttuja, nyt paikallisena. Muutuja näkyy vain tässä funktiossa!
    sensoriLukema = SensorinArvo()    // Funktion palauttama arvo kopioidaan muuttujaan sensoriLukema
}

Paikalliset muuttujat

Funktioilla voi olla omia paikallisia (local) muuttujia.

Code Block
void funktio(int x)
{
    int y;
    
    // ...
}
  • x on funktion parametri ja y funktion paikallinen muuttuja. On huomattava, että parametrit ja paikalliset muuttujat eivät näy funktion ulkopuolelle, eivätkä siten ole käytettävissä muualla kuin funktiossa itsessään.
  • On myös tärkeää huomata, että eri funktioissa voi olla samannimisiä muuttujia ja ne ovat toisistaan täysin riippumattomia.