I denna lektion lär du dig hur du skapar och använder funktioner i Lua, vilket hjälper dig att skriva kod som går att återanvända.
Funktioner är block av kod som kan anropas från olika ställen i programmet. De hjälper oss att:
I Lua är funktioner "first-class values", vilket betyder att de kan sparas i variabler, skickas som argument och returneras från andra funktioner.
I Lua finns flera sätt att definiera funktioner. Det enklaste är:
-- Definiera en enkel funktion
function hälsa()
print("Hej från Lua!")
end
-- Anropa funktionen
hälsa() -- Skriver ut: Hej från Lua!
Du kan också skapa funktioner som tar emot parametrar:
-- Funktion med parametrar
function hälsaPerson(namn)
print("Hej " .. namn .. "!")
end
-- Anropa funktionen med argument
hälsaPerson("Lisa") -- Skriver ut: Hej Lisa!
hälsaPerson("Karl") -- Skriver ut: Hej Karl!
Funktioner kan returnera värden som kan användas senare i koden:
-- Funktion som returnerar ett värde
function addera(a, b)
return a + b
end
-- Använd resultatet från funktionen
local summa = addera(5, 3)
print("Summan är " .. summa) -- Skriver ut: Summan är 8
-- Du kan också använda resultatet direkt
print("10 + 20 = " .. addera(10, 20)) -- Skriver ut: 10 + 20 = 30
Liksom variabler kan funktioner vara lokala eller globala:
-- Global funktion (tillgänglig överallt)
function globalFunktion()
print("Detta är en global funktion")
end
-- Lokal funktion (endast tillgänglig inom ett visst område)
local function lokalFunktion()
print("Detta är en lokal funktion")
end
Det är ofta en bra vana att göra funktioner lokala när de bara används i en fil eller ett begränsat område.
Funktioner kan också definieras som variabler:
-- Detta är samma sak som exemplet ovan, men med annan syntax
local lokalFunktion = function()
print("Detta är en lokal funktion")
end
-- När du anropar den är det samma
lokalFunktion()
I Lua kan funktioner returnera flera värden, vilket är mycket praktiskt:
-- Funktion som returnerar flera värden
function räknaMatte(a, b)
local summa = a + b
local skillnad = a - b
local produkt = a * b
local kvot = a / b
return summa, skillnad, produkt, kvot
end
-- Hämta alla värden
local s, d, p, k = räknaMatte(10, 2)
print("Summa: " .. s) -- Skriver ut: Summa: 12
print("Skillnad: " .. d) -- Skriver ut: Skillnad: 8
print("Produkt: " .. p) -- Skriver ut: Produkt: 20
print("Kvot: " .. k) -- Skriver ut: Kvot: 5
-- Du kan också hämta bara de första värdena
local bara_summa = räknaMatte(10, 2)
print("Bara summan: " .. bara_summa) -- Skriver ut: Bara summan: 12
Ibland behöver du en funktion som kan ta emot ett varierande antal parametrar. Lua stödjer detta med ... (tre punkter):
-- Funktion med varierande antal parametrar
function summaAvAllt(...)
local summa = 0
-- arg är en speciell "tabell" med alla parametrar
local arg = {...}
for i, värde in ipairs(arg) do
summa = summa + värde
end
return summa
end
print(summaAvAllt(1, 2, 3)) -- Skriver ut: 6
print(summaAvAllt(10, 20, 30, 40)) -- Skriver ut: 100
ipairs används för att loopa genom en tabell i ordning. Läs mer om tabeller i nästa lektion!
Skriv två funktioner för att konvertera temperaturer:
-- Temperaturomvandlare
-- Celsius till Fahrenheit
function celsiusTillFahrenheit(celsius)
return celsius * 9/5 + 32
end
-- Fahrenheit till Celsius
function fahrenheitTillCelsius(fahrenheit)
return (fahrenheit - 32) * 5/9
end
-- Testa funktionerna
local temperaturC = 25
local temperaturF = celsiusTillFahrenheit(temperaturC)
print(temperaturC .. "°C är " .. temperaturF .. "°F")
local nyTemperaturC = fahrenheitTillCelsius(temperaturF)
print(temperaturF .. "°F är " .. nyTemperaturC .. "°C")
-- Testa med fler temperaturer
print("0°C är " .. celsiusTillFahrenheit(0) .. "°F")
print("100°C är " .. celsiusTillFahrenheit(100) .. "°F")
print("32°F är " .. fahrenheitTillCelsius(32) .. "°C")
print("212°F är " .. fahrenheitTillCelsius(212) .. "°C")
Skapa en miniräknare med hjälp av funktioner:
addera, subtrahera, multiplicera och divideraberäkna som tar tre parametrar: två tal och en operator ("+", "-", "*", "/")-- Miniräknare med funktioner
-- Definiera matematiska funktioner
local function addera(a, b)
return a + b
end
local function subtrahera(a, b)
return a - b
end
local function multiplicera(a, b)
return a * b
end
local function dividera(a, b)
if b == 0 then
return "Fel: Division med noll"
end
return a / b
end
-- Huvudfunktion för miniräknaren
function beräkna(tal1, operator, tal2)
if operator == "+" then
return addera(tal1, tal2)
elseif operator == "-" then
return subtrahera(tal1, tal2)
elseif operator == "*" then
return multiplicera(tal1, tal2)
elseif operator == "/" then
return dividera(tal1, tal2)
else
return "Ogiltig operator"
end
end
-- Testa miniräknaren
print("5 + 3 = " .. beräkna(5, "+", 3))
print("10 - 4 = " .. beräkna(10, "-", 4))
print("6 * 7 = " .. beräkna(6, "*", 7))
print("20 / 5 = " .. beräkna(20, "/", 5))
print("10 / 0 = " .. beräkna(10, "/", 0))
print("8 ? 2 = " .. beräkna(8, "?", 2))