Lua Academy · Lektion

if-, elseif- och else-satser

Skriv villkorslogik med Lua:s if/elseif/else-syntax.

Lektion 1 av 412 steg

if-, elseif- och else-satser är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Grundläggande if-sats

if-satsen utvärderar ett villkor och kör sitt block när villkoret är sant. I Lua är endast false och nil falska; allt annat – inklusive 0 och "" – är sant. Avsluta blocket med end.

local score = 85

if score >= 90 then
  print("A grade")
end

if score >= 60 then
  print("Passing")   -- prints
end

if 0 then
  print("0 is truthy!")  -- prints in Lua
end

if/elseif/else

Kedja samman flera villkor med elseif och ange ett alternativ med else. Lua utvärderar villkoren uppifrån och ned och kör endast den första matchande grenen. Till skillnad från switch/case i andra språk är Luas elseif ett enda nyckelord, inte else if.

local score = 75

if score >= 90 then
  print("A")
elseif score >= 80 then
  print("B")
elseif score >= 70 then
  print("C")   -- prints
elseif score >= 60 then
  print("D")
else
  print("F")
end

Logiska operatorer i villkor

Lua använder and, or och not som logiska operatorer. De kortsluter utvärderingen: and returnerar det första falska värdet eller det sista värdet; or returnerar det första sanna värdet eller det sista värdet. Detta möjliggör idiomatiska mönster för standardvärden.

local age = 25
local hasID = true

if age >= 18 and hasID then
  print("Entry allowed")
end

-- or for defaults
local name = nil
local display = name or "Guest"
print(display)   -- Guest

Det ternära idiomet med and/or

Lua har ingen ternär operator, men mönstret and/or kan efterlikna en sådan: condition and trueVal or falseVal. Detta fungerar så länge trueVal inte är false eller nil. För säkrare ternär logik kan Ni använda en inline-if-funktion.

local x = 10
local label = (x > 5) and "big" or "small"
print(label)   -- big

-- Safe ternary function
local function ternary(cond, t, f)
  if cond then return t else return f end
end
print(ternary(false, "yes", "no"))  -- no

Kapslade if-satser

Ni kan kapsla if-satser inuti andra grenar. Varje kapslat block kräver ett eget end. Djup kapsling är ofta ett tecken på att Ni kan använda tidiga returer eller guard clauses för att göra logiken mindre kapslad.

local loggedIn = true
local isAdmin = false

if loggedIn then
  if isAdmin then
    print("Admin dashboard")
  else
    print("User dashboard")  -- prints
  end
else
  print("Login required")
end

Guard clauses

En guard clause är en tidig retur som hanterar ogiltiga fall eller gränsfall i början av en funktion och därmed minskar kapslingen. Mönstret håller koden för det normala förloppet utan indrag och gör den lättare att läsa.

local function processAge(age)
  if type(age) ~= "number" then
    return nil, "age must be a number"
  end
  if age < 0 then
    return nil, "age cannot be negative"
  end
  -- happy path
  return math.floor(age)
end

print(processAge(25.7))   -- 25
print(processAge(-1))     -- nil  age cannot be negative

Jämföra värden

Luas jämförelseoperatorer är: == (lika med), ~= (inte lika med), <, >, <=, >=. Observera att ~= betyder ”inte lika med” i Lua – inte !=. Strängar jämförs i lexikografisk ordning. Ni kan inte jämföra strängar direkt med tal.

print(1 == 1)      -- true
print(1 ~= 2)      -- true
print("abc" < "abd")  -- true (lexicographic)
print("10" == 10)  -- false (different types)

-- Safe nil check
local val = nil
if val == nil then
  print("no value")
end

Stränglikhet

Två strängar är lika i Lua om och endast om de har samma byteinnehåll och längd. Lua internlagrar strängar, så lika strängar pekar ofta på samma minnesadress, vilket gör == till en snabb pekarjämförelse. Jämför aldrig strängar med is eller referenslikhet – == jämför alltid värdena.

local s1 = "hello"
local s2 = "hel" .. "lo"

print(s1 == s2)     -- true (same content)
print(s1 == "Hello") -- false (case sensitive)

-- Check for empty string
local name = ""
if name == "" or name == nil then
  print("name is empty or nil")
end

Jämförelse av tabeller och funktioner

Tabeller och funktioner jämförs via referens, inte efter innehåll. Två olika tabellliteraler med identiskt innehåll är inte lika, såvida de inte är samma objekt. Använd metametoder som __eq för att definiera anpassad likhet för tabeller.

local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1

print(t1 == t2)   -- false (different objects)
print(t1 == t3)   -- true (same reference)

local f1 = function() end
local f2 = function() end
print(f1 == f2)   -- false

Idiomatiska mönster

Vanliga Lua-idiom med villkor: använd assert() för att validera förvillkor, använd tricket med and/or för korta standardvärden och undvik dubbla negationer (not not x) för att konvertera ett värde till ett booleskt värde.

-- assert pattern
local function sqrt(n)
  assert(n >= 0, "sqrt of negative")
  return math.sqrt(n)
end

-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal)   -- true

-- Default parameter
local function greet(name)
  name = name or "World"
  print("Hello, " .. name)
end
greet()          -- Hello, World

Snabbkontroll

Vilka värden är falska i Lua?

Sammanfattning: villkor

Sammanfattning:

  • if ... elseif ... else ... end – den fullständiga formen för förgreningar
  • Endast nil och false är falska
  • and/or kortsluter utvärderingen och returnerar operandvärden
  • ~= betyder ”inte lika med” i Lua (inte !=)
  • Tabeller och funktioner jämförs via referens, strängar via värde
  • Använd guard clauses för att minska kapslingen
Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”if-, elseif- och else-satser” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”if-, elseif- och else-satser”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”if-, elseif- och else-satser”?

Skriv villkorslogik med Lua:s if/elseif/else-syntax. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”if-, elseif- och else-satser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. if-, elseif- och else-satser
  2. while- och repeat-until-loopar
  3. Numerisk for-loop
  4. Generisk for-loop och break
← Tillbaka till Lua Academy