Funksjoner
En funksjon er en samling av kode inne i et større program som utfører en spesifikk oppgave og er relativt uavhengig av resten av koden.
En funksjon oppfører seg på mye av den samme måten som et vanlig program - men den er ofte kodet slik at den kan brukes flere ganger mens hovedprogrammet kjører. Funksjoner er viktige verktøy i programmering og kan bidra til å strukturere programmer på en god måte.
Objektorientert programmering går som regel ut på å binde sammen funksjoner og data på en logisk måte, et elev-objekt har funksjoner for å skrive ut elevdata osv.
Mange språk har samlinger av funksjoner i funksjonsbibliotek eller klasser (tenk på Math i actionscript).
Ofte er det nødvendig å sende verdier inn til funksjonene, disse verdiene kalles for parametre eller argumenter til funksjonen.
Et eksempel på dette er sinus funksjonen.
Her er x en parameter som brukes av funksjonen sin til å beregne en verdi (som lagres i variabelen y).
Mange funksjoner sender tilbake resultatet av en beregning - det gjøres med kommandoen return. Se eksemplene under for bruk av return. Dersom du ikke angir noen return verdi, da vil funksjonen returnere verdien undefined. I javascript kan du bare returnere én verdi, men den kan være en av alle definerte typer/klasser.
Definere funksjoner
Du definerer en funksjon på følgende måte:
Som et eksempel viser vi definisjonen av sin():
Når funksjonen er definert, kan vi bruke den i kode:
Merk at parantesene etter navnet på funksjonen beskriver hvilke data du skal sende til funksjonen.
Definisjonen:
sier at sin skal ta imot et Number og beregner en ny verdi av typen Number som returneres.
Denne måten å dokumentere en funksjon på er basert på jsdoc.
Anonyme funksjoner og arrow funksjoner
Du kan også lage funksjoner som ikke blir tildelt et navn.
Denne typen kalles anonyme funksjoner og kan også brukes til å kjøre kode med en gang uten å ta vare på funksjonen. Den kan dermed ikke kjøres omigjen ved et uhell (da den ikke lenger finnes).
Merk de to parantesene til slutt () . De vil aktivere den anonyme funksjonen og kjører koden, deretter er funksjonen borte. Dette kan være nyttig ved oppstart av et spill/app.
Arrow funksjoner
En arrow funksjon defineres slik:
Merk at du trenger paranteser rundt parameterlista dersom den er tom eller har fler enn 1 parameter. Dersom funksjonskroppen bare er et uttrykk - da slipper du skrive return eksplisitt. Dersom du bruker { } rundt kroppen - da må du skrive return for å gi tilbake en verdi.
Den er en forenkla skrivemåte for anonyme funksjoner (med en del endra egenskaper).
Arrow funksjoner binder ikke this. Dermed vil this være definert av scopet hvor arrow funksjonen defineres. Dette er ofte ønskelig for eksempler som under:
Uten arrow funksjon er dette ikke så rett fram
Her vil funksjonen i setIntervall bruke en this som er kobla til det globale skopet Dermed vil m.age ikke endres.
Bruke funksjoner
Dersom du har definert en funksjon selv eller ønsker å bruke en som er ferdig definert i javascript, så er metoden den samme:
Du kjører koden som funksjonen representerer (kroppen til funksjonen) ved å nevne den ved navn - etterfulgt av ().
Dersom funksjonen tar parametre sendes disse i parentesene etter funksjonsnavnet - slik som sinus-funksjonen:
Verdien du sender kan være et tall (slik som over) eller en variabel. Dersom du bruker en variabel, da hentes verdien ut og sendes til funksjonen - som om du hadde skrevet det tallet som er lagra i variabelen.
Dette har samme effekt som om du skrev y = sin(1.23) siden x inneholder tallet 1.23.
Avanserte funksjoner
Funksjoner av høyere orden er vanligvis betegnelsen på funksjoner som tar funksjoner som parameter, eller gir tilbake funksjoner som return-verdi.
Vi skal ikke dykke dypt her, men gi en liten innføring.
Dette temaet kan du lese mer om på nett dersom du søker på functional programming javascript.
Gjennomgang av alle elementer i en array.
Ofte lager vi kode som under for å gå gjennom elementene i en tabell (array).
Det hadde vært nyttig om vi kunne si
Vi kan lage en slik funksjon:
Alle elementer i en tabell skal endres
Tenk deg at du har en tabell som inneholder priser for en webshop. Nå har det blitt nødvendig å skru opp prisene med 5%.
Vi lager en funksjon som kan endre verdiene i en tabell:
Innebygde array-funksjoner
De to eksemplene vi har vist er allerede ferdiglaga for array i javascript.
I tillegg finnes
som er mer avanserte høyere ordens funksjoner. Sjekk dem ut på google ...