Cplusplus:Funksjoner
Fra CodeWiki
Innhold |
Funksjoner
Innen de alle fleste programeringspråk er funksjoner essensielle. De forenkler oppgaver og fører ofte til at koder blir mer effektive og kortere. Kort sagt er en funksjon en kodesnutt som blir utført når du kaller på funksjonen.
Oversikt
En funksjon består av to deler, en definisjon og en ‘kropp’. Definisjon sier noe om hva slags verdi funksjonen skal returnere og hva slags input funksjonen godtar.
Kroppen består av koden som skal utføres og avsluttes alltid (bare med unntak av ‘void’-funksjoner) med uttrykket ‘return’. Dette uttrykket forteller hva som er resultatet av funksjonen.
Eksempel
#include <iostream> int add(int a, int b) //Her starter funksjonen. Den vil returnere en integer og godtar to integere som input { int c = a + b; //Integeren c settes til summen av de to integerene som er sendt til funksjonen return c; //Returnerer c } int main () { int x, y, z; x = 3; y = 5; z = add(x, y); //Her setter vi z til retuneringsverdien av funksjonen add med x og y som input std::cout << x << " + " << y << " = " << z << std::endl; //Skriver ut resultatet return 0; }
Denne koden vil gi:
3 + 5 = 8
Dette er en enkel funksjon hvor det kan være vanskelig å se nytteverdien, men ved store prosjekter hvor store deler kode skal brukes flere ganger vil funksjoner være nødvendig for å holde en viss oversikt.
‘Hello world’
Det er ikke nødvendig for en funksjon å returnere noe i det hele tatt. I så fall setter vi ‘void’ foran funksjonsnavnet. Vi trenger derfor ikke å avslutte funksjonen med ‘return’. Funksjoner er heller ikke avhengig av input. En funksjon som ikke returner noen verdi eller tar noe input kan se slik ut:
void HelloWorld() { std::cout << “Hello world!” << std::endl; }
Denne funksjonen ville vi kalt slik:
HelloWorld();
Standard inputverdier
I funksjoner kan vi definere standardverdier på input. Altså verdier som variablene skal ha hvis annet ikke er satt. Dette gjøres ved å skrive ‘ = verdi’.
#include <iostream> int times(int a, int b = 2) { int c = a * b; return c; } int main () { int x, y, z; x = 5; y = 3; z = times(x); std::cout << z << std::endl; z = times(x, y); std::cout << z << std::endl; return 0; }
Dette vil gi
10 15
fordi variablen x først er ganget med to, siden variabelen b (i funksjonen) ikke er satt. Senere setter vi denne variabelen til tre og resultatet blir 15.
Pass by reference
En viktig del innen funksjoner er det som på engelsk kalles ‘pass by reference’ og som ofte brukes hvis man vil returnere mer enn en verdi. Dette gjøres ved å plassere &-tegnet etter datatypen i funksjonsdefinisjonen. F.eks. slik:
void square(int& a)
Dette fører til at verdien til variablen blir oppdatert automatisk. Husk på at nå vil vi ikke trenge noen retur-verdi og vi må erklære funksjonen for ‘void’. Her er en eksempelkode med en slik funksjon:
#include <iostream> void square(int& a) { a *= 2; } int main () { int x = 8; std::cout << x << std::endl; square(x); std::cout << x << std::endl; return 0; }
Dette vil gi:
8 16
Deklarasjoner
For å holde koder ryddige kan det ofte være lurt å først deklarere alle funksjonene først i koden (før main()) for deretter å skrive funksjonen i sin helhet til slutt. Deklareringen gjøres ved skrive definisjonen etterfulgt av en semikolon.
En annen viktig grunn til at vi gjør dette, er at vi "tvinger" kompilereren til å dobbeltsjekke datatypene til funksjonen. Det vil si at når koden blir kompilert, sjekker vi datatypene til "prototypen" av funksjonen, med datatypene av selve funksjonen vi bruker lenger ned i koden.
int add(int a, int b);
Eksempelkoden blir da seende slik ut:
#include <iostream> int add(int, int); //Her deklarerer vi funksjonen, det er ikke nødvendig å ta med variabelnavn på input (dette er en "prototype" av funksjonen) int main () { int x, y, z; x = 3; y = 5; z = add(x, y); std::cout << x << " + " << y << " = " << z << std::endl; return 0; } int add(int a, int b) //Her skriver vi hele funksjonen { int c = a + b; return c; }
Legg merke til at du må alltid skrive enten funksjonen eller deklarasjonen til en funksjon før du kaller på den.
