Funksjoner som verdier
Lagre og send funksjoner.
Funksjoner som verdier er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Funksjoner er førsteklasses verdier
I Lua er funksjoner førsteklasses verdier. Det betyr at en funksjon bare er data: du kan lagre den i en variabel, sende den til en annen funksjon, returnere den og oppbevare den i en tabell.
Dette ene prinsippet danner grunnlaget for all funksjonell programmering. Når du behandler funksjoner som tall eller strenger, kan du bygge fleksible og gjenbrukbare verktøy.
Lagre en funksjon i en variabel
Navnet du gir en funksjon, er egentlig bare en variabel som inneholder funksjonsverdien. Du kan fritt tilordne denne verdien til en annen variabel.
Begge navnene nedenfor peker på den samme underliggende funksjonen, så et kall til enten av dem kjører den samme koden.
local function greet(name)
return "Hello, " .. name
end
local hi = greet
print(greet("Ada"))
print(hi("Lin"))Anonyme funksjoner
Du trenger ikke et navn for å opprette en funksjon. En anonym funksjon skrives med syntaksen function ... end og brukes direkte som en verdi.
Å tilordne en slik funksjon til en lokal variabel er det samme som en vanlig funksjonsdefinisjon, bare skrevet på samme sted.
local square = function(x)
return x * x
end
print(square(5))
print(square(9))Funksjoner som argumenter
Fordi funksjoner er verdier, kan du sende dem til andre funksjoner. En funksjon som tar en annen funksjon som argument, kalles en høyereordensfunksjon.
Her vet ikke apply hvilket arbeid den skal utføre før du gir den en funksjon å kjøre.
local function apply(f, x)
return f(x)
end
local function double(n) return n * 2 end
print(apply(double, 10))
print(apply(function(n) return n + 1 end, 10))Returnere en funksjon
En funksjon kan returnere en annen funksjon. Dermed kan du bygge funksjoner ved behov, konfigurert av argumentene du sendte inn.
Her bygger multiplier en helt ny funksjon hver gang, og den husker faktoren du ga den.
local function multiplier(factor)
return function(x)
return x * factor
end
end
local triple = multiplier(3)
print(triple(4))
print(multiplier(10)(5))Closures fanger variabler
Når en returnert funksjon bruker en lokal variabel fra den omsluttende funksjonen, fanger den opp variabelen. Kombinasjonen av funksjonen og de fangede variablene kalles en closure.
Den fangede factor forblir tilgjengelig så lenge closuren eksisterer, også etter at det ytre kallet er ferdig.
local function counter()
local n = 0
return function()
n = n + 1
return n
end
end
local next = counter()
print(next())
print(next())
print(next())Funksjoner i tabeller
Tabeller kan inneholde funksjoner på samme måte som alle andre verdier. Slik bygger Lua moduler og objekter: en tabell knytter navn til funksjonsverdier.
Du kan slå opp en funksjon med en nøkkel og kalle den, eller til og med iterere over en tabell med operasjoner.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end
}
print(ops.add(2, 3))
print(ops["sub"](9, 4))En tabell med strategier
Ved å lagre funksjoner i en tabell kan du velge atferd under kjøring ved hjelp av en nøkkel. Dette erstatter lange if-else-kjeder med et ryddig oppslag.
Når operasjonen velges etter navn, blir koden som kaller den, kort og enkel å utvide med nye nøkler.
local dispatch = {
upper = string.upper,
lower = string.lower,
rev = string.reverse
}
local function run(name, s)
return dispatch[name](s)
end
print(run("upper", "lua"))
print(run("rev", "lua"))Callback-funksjoner
En callback er en funksjon du sender inn, slik at den kan kalles senere. Lua-standardbiblioteket bruker dette mønsteret; for eksempel tar table.sort en sammenligningsfunksjon.
Callbacken bestemmer regelen, mens biblioteket håndterer iterasjonen og omorganiseringen.
local nums = {5, 2, 9, 1}
table.sort(nums, function(a, b)
return a > b
end)
print(table.concat(nums, ", "))Funksjoner har identitet
Hver funksjonsverdi er et separat objekt. To separate funksjonsliteraler er aldri like, selv om de inneholder den samme koden.
Men en enkelt funksjon som er lagret i to variabler, blir sammenlignet som lik, fordi begge navnene refererer til den samme verdien.
local f = function() return 1 end
local g = function() return 1 end
local h = f
print(f == g)
print(f == h)Hvorfor dette er viktig
Når du behandler funksjoner som verdier, kan du skrive generiske verktøy én gang og tilpasse dem med funksjonene du sender inn. Mapping, filtrering, partiell applikasjon og komposisjon bygger alle på dette.
Resten av dette kurset bygger praktiske mønstre oppå førsteklasses funksjoner og closures.
Rask sjekk
Test forståelsen din av førsteklasses funksjoner i Lua.
Oppsummering
Funksjoner i Lua er førsteklasses verdier: lagre dem i variabler og tabeller, send dem som argumenter og returner dem fra andre funksjoner.
Når du returnerer en funksjon som fanger opp lokale variabler fra den omsluttende funksjonen, oppretter du en closure. Disse ideene er grunnlaget for alle funksjonelle mønstre som kommer.
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Funksjoner som verdier» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Funksjoner som verdier», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Funksjoner som verdier»?
Lagre og send funksjoner. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Funksjoner som verdier»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Funksjoner som verdier
- map, filter, reduce
- Partiell applikasjon
- Sett sammen funksjoner