2.5 Parametrar och returvärde
I ett tidigare exempel såg vi hur ett program kan delas upp i flera funktioner. Dels för att få en uppdelning i mindre delar och på så sätt strukturera programkoden. Dels för att koppla olika funktioner till olika element och händelser, t.ex. olika funktioner för olika knappar i gränssnittet. Nu ska vi titta på hur vi kan skicka parametrar (indata) till en funktion och hur en funktion kan returnera ett svar. Exemplet är uppdelat i tre delar:
- JavaScripts fördefinierade funktioner använder sig av parametrar och i många fall även returvärden.
- I några egendefinierade funktioner definieras parametrar och värden skickas till dem, då funktionerna anropas.
- Utveckling av föregående steg, där koden skrivs om, så att en av funktionerna också returnerar ett värde.
23 min.
Sammanfattning
- Parametrar definieras i funktionsdeklarationen, t.ex.
function fnamn(par1, par2) { ... }
. Inom parentesen namnger man parametrarna och inom funktionens klamrar används de på samma sätt som variabler. - Då man anropar en funktion skickar man värden till parametrarna, t.ex.
fnamn(27, "en text");
Dessa värden läggs då in i funktionens parametrar (par1=27
ochpar2="en text"
) och funktionen utförs med dessa värden. - Använder man en variabel som parameter i anropet av en funktion, är det variabelns innehåll som skickas över till parametern. Om t.ex. variabel
a
innehåller värdet5
och man skriverfnamn(a, "abc")
skickas värdet5
tillpar1
och"abc"
tillpar2
. - En funktion kan returnera ett värde, t.ex.
return 37;
ellerreturn sum;
Det är alltid ett värde som returneras, så om variabelnsum
innehåller värdet68
är det värdet68
som returneras. - Om en funktion har ett returvärde, måste man ta emot det i anropet av funktionen, t.ex. i en tilldelning av en variabel eller använda svaret i ett uttryck,
let x = prod(2,7);
ellery * prod(3,4)
- En funktion kan ha flera parametrar, men endast ett returvärde.
- Ibland används benämningen argument istället för parametrar, men det är samma sak.
Egna övningar
Här följer ett förslag på några egna övningar. Öppna filen test.html och test.js och utför nedanstående punkter. Den här gången är övningarna lite mer omfattande än i tidigare exempel, för att det också ska bli någon funktionalitet som kan testas.
Programmet har två tärningar och har i stort sett samma programkod som i föregående exempel, med några tillägg. Du ska nu lägga till följande:
-
Parametrar:
- Inför en parameter kallad
dieElem
i deklarationen av funktionenthrowDie
. - Kasta båda tärningarna:
- I
throwAllDice
skriver du ett anrop avthrowDie
, där du skickar meddie1Elem
som parameter.- Prova att klicka på knappen, för att se att den första tärningen kastas.
- Lägg till ännu ett anrop av
throwDie
och skicka nu meddie2Elem
som parameter.- När du klickar på knappen, ska båda tärningarna kastas.
- I
- Kasta endast en tärning:
- I
throwOneDie
lägger du in ett anrop avthrowDie
, där du skickar medthis
som parameter.- Funktionen
throwOneDie
är kopplad tillimg
-taggarna för tärningarna, så oavsett vilken tärning man klickar på, kommer man till denna funktion. Då ärthis
en referens till denimg
-tagg användaren klickat på. - Prova att klicka på tärningarna, för att kasta dem var för sig..
- Funktionen
- I
- Inför en parameter kallad
-
Beräkna summan:
- Du ska nu beräkna summan av de båda tärningarna och behöver då tärningarnas värden. Värdet finns visserligen i filnamnet, men för att enklare komma åt det, ska det också sparas i ett attribut i
img
-taggen. Iimg
-taggen finns ingetvalue
-attribut, så vi använder iställetalt
-attributet. Lägg till en rad sist i funktionenthrowDie
, där du sparardieValue
i tärningensalt
-attribut. - I funktionen
diceSum
beräknar du summan, genom att lägga ihop tärningarnasalt
-attribut. Spara summan i en lokal variabel.- Då man avläser
alt
-attributet tolkas det som text, så du måste konvertera till tal med Number.
- Då man avläser
- Skriv sedan ut variabeln tillsammans med lämplig text i elementet för resultat.
- Du ska nu beräkna summan av de båda tärningarna och behöver då tärningarnas värden. Värdet finns visserligen i filnamnet, men för att enklare komma åt det, ska det också sparas i ett attribut i