0Pricing
Lua Academy · Lezione

Istruzioni if, elseif ed else

Scriva la logica dei rami condizionali con la sintassi if/elseif/else di Lua.

Istruzioni if, elseif ed else è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Istruzione if di base

L'istruzione if valuta una condizione ed esegue il relativo blocco quando la condizione è vera. In Lua solo false e nil sono falsi; tutto il resto, inclusi 0 e "", è vero. Concluda il blocco con 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

Colleghi più condizioni con elseif e fornisca un caso alternativo con else. Lua valuta le condizioni dall'alto verso il basso ed esegue solo il primo ramo corrispondente. A differenza di switch/case presenti in altri linguaggi, in Lua elseif è un'unica parola chiave, non 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

Operatori logici nelle condizioni

Lua utilizza and, or e not come operatori logici. La valutazione usa il cortocircuito: and restituisce il primo valore falso o l'ultimo valore; or restituisce il primo valore vero o l'ultimo valore. Questo consente di usare gli idiomi per i valori predefiniti.

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

Idioma ternario con and/or

Lua non ha un operatore ternario, ma lo schema and/or ne offre un'approssimazione: condition and trueVal or falseVal. Funziona purché trueVal non sia false o nil. Per una logica ternaria più sicura, utilizzi una funzione if inline.

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

Istruzioni if annidate

È possibile annidare istruzioni if all'interno di altri rami. Ogni blocco annidato richiede il proprio end. Un annidamento profondo spesso indica la possibilità di utilizzare restituzioni anticipate o clausole di guardia per semplificare la logica.

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

Clausole di guardia

Una clausola di guardia è una restituzione anticipata che gestisce i casi non validi o limite all'inizio di una funzione, riducendo l'annidamento. Questo schema mantiene il codice del "percorso principale" senza indentazione aggiuntiva e più facile da leggere.

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

Confrontare i valori

Operatori di confronto di Lua: == (uguale), ~= (diverso), <, >, <=, >=. Nota: ~= è l'operatore Lua per "diverso", non !=. I confronti tra stringhe utilizzano l'ordine lessicografico. Non è possibile confrontare direttamente stringhe e numeri.

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

Uguaglianza tra stringhe

Due stringhe sono uguali in Lua se e solo se hanno lo stesso contenuto in byte e la stessa lunghezza. Lua fa l'interning delle stringhe, quindi le stringhe uguali spesso puntano alla stessa area di memoria, rendendo == un rapido confronto dei puntatori. Non confronti mai le stringhe con is o con l'uguaglianza dei riferimenti: == confronta sempre i valori.

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

Confronto tra tabelle e funzioni

Le tabelle e le funzioni vengono confrontate per riferimento, non per contenuto. Due diversi valori letterali di tabella con contenuto identico non sono uguali, a meno che non siano lo stesso oggetto. Utilizzi metametodi come __eq per definire un'uguaglianza personalizzata per le tabelle.

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

Schemi idiomatici

Idiomi Lua comuni con le condizioni: utilizzi assert() per convalidare i prerequisiti, utilizzi il trucco and/or per valori predefiniti brevi ed eviti le doppie negazioni (not not x) per convertire qualsiasi valore in un booleano.

-- 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

Verifica rapida

Quali valori sono falsi in Lua?

Riepilogo: condizioni

Riepilogo:

  • if ... elseif ... else ... end: la forma completa per le diramazioni
  • Solo nil e false sono falsi
  • and/or usano il cortocircuito e restituiscono i valori degli operandi
  • ~= significa "diverso" in Lua (non !=)
  • Le tabelle e le funzioni vengono confrontate per riferimento, le stringhe per valore
  • Utilizzi le clausole di guardia per ridurre l'annidamento

Domande Frequenti

La lezione «Istruzioni if, elseif ed else» è gratuita?

Sì — il testo completo di «Istruzioni if, elseif ed else» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Istruzioni if, elseif ed else»?

Scriva la logica dei rami condizionali con la sintassi if/elseif/else di Lua. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Istruzioni if, elseif ed else»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Istruzioni if, elseif ed else
  2. Cicli while e repeat-until
  3. Ciclo for numerico
  4. for generico e break
← Torna a Lua Academy