
Funktioner med returvärden (programmering)

Uppgradera för mer innehåll
Sant eller falskt? Vi ger funktionen ett namn för att vi ska kunna anropa den i programmet.
Lina har lagt ihop två små robotprogram, till ett större... … genom att använda funktioner. Hon har gjort om två delar av sin kod till två funktioner... ...och den del av programmet som använder funktionerna, hennes huvudprogram, ser då ut så här: Första instruktionen är ett anrop till funktionen Start. Sen ska två olika personer skriva in namn och ålder. Programmet räknar ut åldersskillnaden, och roboten talar om resultatet. Sist i huvudprogrammet anropas funktionen “Slut”.
Lina testar programmet. Roboten utför instruktionerna i “Start”: Öppna ögonen, Snurra på antennen och tänd skärmen. Sen går programmet tillbaka från funktionen Start, till huvudprogrammet. Det läser raden som kommer direkt efter anropet till Start funktionen. Roboten ber Lina att mata in sitt namn... ...och ålder.
Sen kommer instruktionen ”Be användaren mata in sitt namn” Men den instruktionen hade vi ju nyss! De här fem raderna är nästan samma som... ...de här fem raderna, ...förutom att först används variablerna “namn-ett” och “ålder-ett” och sen variablerna “namn-två” och “ålder-två”. När kod upprepas kan Lina använda en funktion istället, det har hon redan lärt sig. Men koden är inte exakt likadan på de två ställena. Namnen på variablerna är olika.
Går det ändå att använda en funktion? Ja, det går faktiskt. Kolla här. Instruktionerna till funktionen har hon redan, här! Lina kopierar raderna och lägger dem ovanför huvudprogrammet.
Vad hon vill är att funktionen ska fungera för alla namn och åldrar, inte bara namn-ett, ålder-ett, eller namn-två och ålder-två. Hur gör hon det? Hon ändrar variablerna till bara namn och ålder - hon tar bort siffrorna. Siffrorna kommer att läggas till när funktionen svarar på programmets anrop. Allra sist i funktionen lägger Lina till instruktionen “Returnera namn och ålder”.
Funktionen skickar då tillbaka, returnerar, det värde som finns i variablerna “ namn” och “ålder” till huvudprogrammet. Funktionen får namnet “Hej” med två parenteser. Lina tittar i huvudprogrammet. Programmet ska jämföra två personers ålder. Så hon anropar funktionen hej två gånger.
Så här. Och likadant här. Första gången funktionen anropas ska “namn” och “ålder” sparas i variablerna “namn-ett” och “ålder-ett”. Därför skriver hon så här. “namn-ett och ålder-ett Anropa hej” Hon tilldelar variablerna värden med ett likhetstecken. Och den andra personens namn och ålder sparas i “namn-två” och “ålder-två”.
Såg du vad hon gjorde? En enda funktion användes för att spara värden i flera olika variabler. Lina testar koden igen. Programmet startar med att anropa funktionen “Start”. Roboten kör igång.
Programmet går tillbaka till raden efter anropet. Nu anropas funktionen “Hej”. Och roboten frågar efter Linas namn. “Lina” sparas i variabeln “namn”. Hej Lina Roboten frågar efter Linas ålder och hon svarar 16. “16” sparas i variabeln “ålder”. Värdena som är sparade i variablerna “namn” och “ålder returneras nu till den rad som anropade funktionen. “Lina” sparas i “namn-ett” och “16” i “ålder-ett”.
Nästa rad i huvudprogrammet anropar “Hej” igen. Roboten frågar efter Marias namn. “Maria” sparas i variabeln “namn”. Hej Maria Roboten frågar efter Marias ålder och hon svarar 15. “15” sparas i variabeln “ålder”. Värdena som är sparade i variablerna “namn” och “ålder” returneras till huvudprogrammet. Och NU sparas “Maria” i variabeln “namn-två” och “15” i “ålder-två”.
Nästa rad i huvudprogrammet sparar resultatet av “ålder-ett” minus “ålder-två”. Och sen säger roboten Lina är ett år äldre än Maria. Programmet fungerar! “Hej”-funktionen kan returnera olika värden som sparas i olika variabler genom att använda returvärden.