Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

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.

Funktioista puhuttaessa voidaan erottaa kaksi tasoa:

  • 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:

  1. paluuarvon tyypistä (pakollinen!)
  2. funktion nimestä (pakollinen!)
  3. parametreista (ei pakollisia, riippuu käyttötarkoituksesta)
Code Block
Wiki Markup
h1. 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.

Funktioista puhuttaessa voidaan erottaa kaksi tasoa:
* Toisaalta on olemassa valmiita kirjastofunktioita, jotka ovat kaikkien ohjelmoijien käytössä. Esim [debugPrint|RobotC - debugPrint].
* Toisaalta jokainen ohjelmoija voi kirjoittaa funktioita omaan käyttöönsä.

h2. Funktion kirjoittaminen

Funktion täydellinen nimi koostuu kolmesta asiasta:
# paluuarvon *tyypistä* (pakollinen\!)
# funktion *nimestä* (pakollinen\!)
# _parametreista_ (ei pakollisia, riippuu käyttötarkoituksesta)

{code}
paluuarvon_tyyppi funktion_nimi(
	p1_tyyppi param1,
	/* ... */
	pn_tyyppi paramn)
{
    // Funktion koodi tänne
}
{code}

{note}Funktiot kannattaa kirjoittaa {{task 
Note

Funktiot kannattaa kirjoittaa task main()

}}

:in

yläpuolelle.

Funktiotyypit

Funktioita voidaan tehdä erilaisia:

Anchor
esim1
esim1

Esimerkki 1

Esimerkissä on toteutettu funktio AjaEteenpain(). Image Added

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.

Esimerkin 1 funktion kutsuminen pääohjelmasta:

Code Block
{note}

h2. Funktiotyypit

Funktioita voidaan tehdä erilaisia:

* [Ei parametreja - ei paluuarvoa|#esim1]
* [Parametri - ei paluuarvoa|#esim2]
* [Parametri ja paluuarvo|#esim4]

{anchor:esim1}

h3. Esimerkki 1

Esimerkissä on toteutettu funktio {{AjaEteenpain()}}. !funktiot_1.png|border=0!

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

h2. Funktion kutsuminen

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

Esimerkin 1 funktion kutsuminen pääohjelmasta:
{code}
task main()              // pääohjelma
{
    AjaEteenpain();     // funktion kutsu
}
{code}

{note}Funktiota voidaan kutsua mistä tahansa ohjelmasta, myös funktiosta itsestään (kts. [rekursio|http://fi.wikipedia.org/wiki/Rekursio]).{note}

{anchor:esim2}

h2. 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.*

h3. Esimerkki 2 !funktiot_2.png|border=0!

Edellä oleva funktio ottaa parametrikseen yhden kokonaisluvun, ajan.

{anchor:esim3}

h3. Esimerkki 3 !funktiot_3.png|border=0!

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

h2. 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}

h3. Esimerkki 4 !funktiot_4.png|border=0!


Esimerkissä funktio {{SensorinArvo()}} palauttaa sensorin {{S1}} lukeman.

{anchor:esim5}

h3. Esimerkki 5 !funktiot_5.png|border=0!


Esimerkissä funktio {{SensorinArvo(int portti)}} palauttaa parametrin portti määrittelemän sensorin lukeman.

h3. Esimerkki 6 monta kutsua pääohjelmasta

Esimerkissä funktio {{SensorinArvo(int portti)}} palauttaa parametrin portti määrittelemän sensorin lukeman.

h2. Paikalliset muuttujat

Funktioilla voi olla omia paikallisia (_local
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.

Esimerkki 2 Image Added

Edellä oleva funktio ottaa parametrikseen yhden kokonaisluvun, ajan.

Anchor
esim3
esim3

Esimerkki 3 Image Added

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 Image Added

Esimerkissä funktio SensorinArvo() palauttaa sensorin S1 lukeman.

Anchor
esim5
esim5

Esimerkki 5 Image Added

Esimerkissä funktio SensorinArvo(int portti) palauttaa parametrin portti määrittelemän sensorin lukeman.

Esimerkki 6 monta kutsua pääohjelmasta

Esimerkissä funktio SensorinArvo(int portti) palauttaa parametrin portti määrittelemän sensorin lukeman.

Paikalliset muuttujat

Funktioilla voi olla omia paikallisia (local) muuttujia.

Code Block
_) muuttujia.

{code}
void funktio(int x)
{
    int y;

    // ...
}
{code}
* {{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 
  • 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.