Funktioner

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

En funktion i Arduino-C er en afgrænset kodedel, der kan kaldes fra forskellige steder, og herved anvendes i mange forskellige sammenhænge. Herved øges overskueligheden af koden, samtidig med at fejlrettelser og udvidelser gøres nemmere, da koden kun skal rettes et sted.

Grundelementerne i en funktion

En funktion skrives på følgende måde:

int Gange(int x, int y){
  int resultat;

  resultat = x*y;
  return resultat;
}
  • Første linje:
    • int: Her defineres typen af det resultat som funktionen skal returnere. Hvis funktionen ikke returnere noget angives typen til void.
    • Gange: Navnet på funtionen. Dette navn anvendes når funktion skal kaldes fra andre steder i koden.
    • int x, int y: Funktionens argumenter og deres typer. Funktionen kan have et valgfrit antal paramtre - inklusiv 0 paramtre.
  • Anden linje:
    • int resultat: Her initialiseres variable, der skal bruges i funktionen.
  • Tredje linje
    • resultat = x*y: Her placeres den kode som funktionen skal udføre. Koden kan strække sig over et vilkårligt antal linjer.
  • Fjerde linje
    • return resultat: return anvendes til at afbryde udførelsen af funktionen og returnere et resultat. Her returneres variablen resultat. Bemærk at typen af det der returneres skal matche den type der blev defineret i første linje.

Koden der tilhører funktionen indrammes af et sæt krøllede paranteser, som vist i eksemplet ovenfor.

Funktioner må ikke placeres inden i andre funktioner.

Argumenter til en funktion

En af styrkerne ved funktioner er at de kan udstyres med argumenter så de kan udføre den samme operation på forskellige data. Se følgende eksempel:

int Gange(int x, int y){
  int resultat;

  resultat = x*y;
  return resultat;
}

int a=3;
int b=5;
int c;
c = gange(a,b);
// c indeholder nu a*b = 3*5 = 15

int diameter = 13;
int pi = 3; //Ja-ja, pi er ikke 3, men nu er funktionen defineret til at bruge heltal - så kan vi jo ikke bruge decimaltal...
int omkreds;
omkreds = gange(diameter,pi);
//omkreds indeholder nu 3*13 = 39

Først defineres koden på samme måde som i det første eksempel. Herefter initialiseres tre variable: a,b og c, hvor a og b tildeles værdierne 3 hhv. 5. Så kaldes funtionen gange() med a og b som argumenter og resultatet placeres i c. Efterfølgende bruges gangefunktionen igen, men nu med et nyt sæt argumenter: pi og diameter.

Lokale variable i en funktion

I javaScript kan man arbejde med globale variabler, med de fordele og ulemper der er ved det.

Fordelen kan være at man laver en fornuftig navngivning af sine variable, og så kan man anvende dem uanset hvor man er i hele programmet.

Ulempen kan være i større programmer, at man ikke lige er opmærksom på at man har navngivet en variabel til det samme to forskellige steder, hvor man egentlig ønsker at det skal være to forskellige variabler (en klassiker er at man bruger n i en løkke i hoved-koden, og i løkken kalder man så en funktion der også bruger n i en løkke. Hvis der er den samme variabel n, så går det galt.

For at undgå den type problemer, så kan man lave lokale variabler inde i en funktion.

Et eksempel der illustrerer det kan være:

function registrer() {
    startTid = 5;
    var tid = 34;
    slutTid = startTid + tid;
}

I dette eksempel er startTid og slutTid globale variabler, mens tid er en lokal variabel, da den er defineret med var foran. Det betyder at variablen tid kun eksisterer og kan anvendes i funktionen registrer(), og at der kan eksistere en anden lokal variabel der hedder tid i en anden funktion, og der kan også eksistere en global variabel der også hedder tid, uden at de variabler har noget med hinanden at gøre.

Teknisk siger man at variablens scope er begrænset til funktionen.