Lua-sheriffen, del 4- Funktioner

Är det bara jag som tycker det är lite ironiskt att ”Lua” står ovanpå en sol? ”Lua” betyder ”måne” på portugisiska. 😀

Lua-sheriffen

Förra veckan tittade vi på Tables, idag ska vi gå vidare och titta på funktioner!

Vi börjar direkt med att ta ett exempel på en väldigt enkel funktion, fakultet (som vi tittat på tidigare, även denna gång är den rekursiv):

Kort sagt, om det inskickade talet är mindre än 2 (det vill säga, 1 eller 0), skicka tillbaka 1, annars multipliceras det nuvarande talet med ett nytt fakultet-anrop som tar talet under det nuvarande.

Notera att det finns två ”end” i koden, en för if-satsen och en för funktionen. Som synes behöver man i Lua inte ange returtyp, och det går också bra att skriva flera returvärden (uppdelade med kommatecken):

Om man skriver ”a = test()” istället kommer det andra värdet som returnerats att förkastas.

Den uppmärksamme, som har varit med ett tag, märker nog att detta påminner ganska mycket om Python.

Funktioner som data

Funktioner i Lua betraktas, som så mycket annat, som vilken data som helst. Man kan exempelvis skicka funktionsnamn som argument i funktioner och därefter exekvera dem med några godtyckliga argument, som här:

Precis som med variabler kan man också sätta ‘x = y’ så följande är helt okej:

Noterar ni något som är dumt med detta?
Den här versionen av ‘operation’ är inte så praktisk eftersom den bara kan ta två argument utöver den funktion som ska köras. Tänk om vi har en funktion som har ett, eller tre argument?
Istället för att göra separata versioner av varje funktion för olika antal argument kan vi istället skriva så här:

Detta tillåter oss att ange ett godtyckligt antal argument, och när vi sedan anropar func skickas alla efterföljande argument med i det anropet. Praktiskt va!? 😀
Så när kan man ha nytta för detta? Kanske aldrig! 😉
Värt att veta med ‘…’ är att det går också att plocka ut enstaka argument. Detta görs med funktionen select(x, …) där man får alla argument från x och framåt.
Om man tilldelar returvärdet till en variabel sparas däremot endast värdet i x:

Varför fungerar det på detta sätt? Bra fråga!

Så vad har vi lärt oss idag?

  • Vad Lua betyder på portugisiska
  • Hur man skapar en funktion i Lua
  • Hur man anger flera returvärden och använder dessa efter anropet
  • Att funktioner kan behandlas som vilken data som helst
  • Hur man kan tillåta ett godtyckligt antal variabler som invärden i en funktion och hur man kan hämta ut dessa vid behov

Det var allt för idag, nästa gång ska vi titta på hur man kan skapa objekt i Lua! Ses då! 🙂

Kommentera