Lua Academy · leksjon

Oversikt over Lua-datatyper

Utforsk typene nil, boolean, number, string, table, function og userdata.

Leksjon 1 av 412 trinn

Oversikt over Lua-datatyper 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.

Velkommen til Lua

Lua er et lett, raskt og innebyggbart skriptspråk som brukes i spillmotorer, webservere og innebygde systemer. Før De skriver faktiske programmer, må De forstå hvordan Lua representerer data.

Lua har 8 grunnleggende typer: nil, boolean, number, string, table, function, userdata og thread. Hver verdi i Lua tilhører nøyaktig én av disse typene.

-- Check the type of any value with type()
print(type(42))        -- number
print(type("hello"))   -- string
print(type(true))      -- boolean
print(type(nil))       -- nil

nil: Fravær av verdi

nil er Lua sin måte å representere ingenting eller ingen verdi på. Det er den eneste verdien av denne typen. Variabler som aldri har fått en verdi, inneholder automatisk nil.

Hvis De tilordner nil til en global variabel, slettes den i praksis. I tabeller fjernes oppføringen helt når De setter en nøkkel til nil.

-- Unassigned variables are nil
print(x)          -- nil

x = 10
print(x)          -- 10

x = nil
print(x)          -- nil (variable is gone)

boolean: true og false

Typen boolean har nøyaktig to verdier: true og false. Lua sine regler for sannhetsverdi er enkle, men viktige: bare nil og false er falsy. Alt annet – inkludert tallet 0 og den tomme strengen "" – er truthy.

Dette skiller seg fra mange språk, der 0 eller "" regnes som usanne.

-- Lua truthiness examples
if 0 then print("0 is truthy!") end       -- prints!
if "" then print("empty str is truthy!") end -- prints!
if nil then print("nil") else print("nil is falsy") end
if false then print("false") else print("false is falsy") end

number: Heltall og flyttall

Lua 5.3+ har to undertyper av number: integer og float. Heltall er nøyaktige 64-bitsverdier, mens flyttall bruker IEEE 754 med dobbel presisjon. I Lua 5.1/5.2 er alle tall double.

Funksjonen math.type() skiller mellom de to undertypene. Divisjon med / returnerer alltid et flyttall, mens // (heltallsdivisjon) returnerer et heltall når begge operandene er heltall.

print(type(10))       -- number
print(type(10.5))     -- number
print(math.type(10))  -- integer
print(math.type(10.5))-- float
print(10 / 3)         -- 3.3333...
print(10 // 3)        -- 3  (floor division)

string: Tekst i Lua

Strenger i Lua er uforanderlige sekvenser av byte. De kan avgrenses med enkle anførselstegn, doble anførselstegn eller lange klammeparenteser [[...]] for strenger over flere linjer. Strenger med lange klammeparenteser ignorerer det første linjeskiftet og bevarer alt annet bokstavelig.

Lua-strenger er internert, slik at identiske strenger deler minne. Lengdeoperatoren # returnerer antallet byte.

local s1 = 'single quotes'
local s2 = "double quotes"
local s3 = [[multi-line
long string]]

print(#s1)           -- 13
print(type(s1))      -- string
print(s1 .. " works") -- concatenation with ..

table: Den universelle beholderen

Typen table er Lua sin eneste sammensatte datastruktur, men den er likevel kraftig nok til å implementere arrayer, ordbøker, objekter, mengder og mer. Tabeller er assosiative arrayer: De kobler nøkler til verdier, der nøklene kan være alle verdier som ikke er nil eller NaN.

Tabeller opprettes med krøllparenteser {}. Tabeller i array-stil bruker heltallsnøkler som starter på 1.

-- Array style
local fruits = {"apple", "banana", "cherry"}
print(fruits[1])   -- apple (1-indexed!)

-- Dictionary style
local person = {name = "Alice", age = 30}
print(person.name) -- Alice
print(person["age"]) -- 30

function: Førsteklasses verdier

Funksjoner i Lua er førsteklasses verdier av typen function. De kan lagres i variabler, sendes som argumenter og returneres fra andre funksjoner. Dette gjør Lua godt egnet for funksjonelle programmeringsmønstre.

De kan definere funksjoner med nøkkelordet function eller tilordne anonyme funksjoner til variabler. Begge formene er ekvivalente.

-- Two equivalent ways to define a function
function greet(name)
  return "Hello, " .. name
end

local greet2 = function(name)
  return "Hello, " .. name
end

print(type(greet))   -- function
print(greet("Lua"))  -- Hello, Lua

userdata og thread

userdata representerer vilkårlige C-data som administreres av vertsprogrammet. De kan ikke opprette userdata i ren Lua – det kommer fra C-utvidelser eller innebyggingsmiljøer som spillmotorer. Det gjør det mulig for C-kode å eksponere objekter for Lua-skript.

thread representerer korutiner – uavhengige kjøringstråder med egne stabler. Vi utforsker korutiner i en egen leksjon. Foreløpig er det nok å vite at coroutine.create() returnerer en verdi av typen thread.

-- thread type via coroutine
local co = coroutine.create(function()
  print("coroutine body")
end)

print(type(co))  -- thread

-- userdata comes from C, not creatable in pure Lua
-- type(io.stdin) == "file" is a userdata variant

Bruke type() til å undersøke verdier

Den innebygde funksjonen type() returnerer alltid en string som angir typen til argumentet. Dette er nyttig for defensiv programmering og feilsøking. De kan sammenligne resultatet direkte med strengene som angir typene.

Merk at type(nil) returnerer strengen "nil", ikke selve verdien nil. Dermed kan De trygt kontrollere om en variabel inneholder nil uten å få feil.

local values = {42, "hi", true, nil, {}, function() end}

-- Note: nil in table stops ipairs early
for i = 1, 3 do
  print(i, type(values[i]))
end
-- 1  number
-- 2  string
-- 3  boolean

Typeforskjeller fra andre språk

Hvis De kommer fra JavaScript, Python eller Java, kan noen av Lua sine typeregler overraske Dem. Det finnes ingen separat heltallstype som er synlig for type() – både heltall og flyttall returnerer "number". Arrayer har ingen egen type – de er bare tabeller. Klasser finnes ikke – objekter er tabeller med metatabeller.

Hvis De forstår disse forskjellene, unngår De vanlige feil når De går mellom språk.

-- No separate array type
local arr = {1, 2, 3}
print(type(arr))      -- table (not array!)

-- No separate integer type visible
print(type(1))        -- number
print(type(1.0))      -- number

-- math.type distinguishes
print(math.type(1))   -- integer
print(math.type(1.0)) -- float

Kort kontroll

Hva returnerer type(0) i Lua?

Oppsummering: Oversikt over Lua-datatyper

De har lært alle de 8 Lua-typene:

  • nil – fravær av verdi; falsy
  • boolean – true/false; bare nil og false er falsy
  • number – heltall eller flyttall; bruk math.type() for å skille dem
  • string – uforanderlige bytesekvenser; bruk .. for å sette sammen strenger
  • table – den universelle beholderen for arrayer og ordbøker
  • function – førsteklasses verdier som kan lagres i variabler
  • userdata – C-data som eksponeres for Lua
  • thread – referanser til korutiner

Neste: deklarere variabler – globalt kontra lokalt omfang.

Gratis å komme i gang

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 «Oversikt over Lua-datatyper» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Oversikt over Lua-datatyper», 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 «Oversikt over Lua-datatyper»?

Utforsk typene nil, boolean, number, string, table, function og userdata. 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 «Oversikt over Lua-datatyper»?

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

  1. Oversikt over Lua-datatyper
  2. Deklarere variabler i Lua
  3. Aritmetiske operatorer og sammenligningsoperatorer
  4. Typetvang og konvertering
← Tilbake til Lua Academy