0Pricing
Lua Academy · Aula

Instruções if, elseif e else

Escreva lógica de ramificação condicional com a sintaxe if/elseif/else do Lua.

Instruções if, elseif e else é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Instrução if básica

A instrução if avalia uma condição e executa seu bloco quando a condição é verdadeira. Em Lua, somente false e nil são falsos; todo o restante — incluindo 0 e "" — é verdadeiro. Encerre o bloco com 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

Encadeie várias condições com elseif e forneça uma alternativa com else. Lua avalia as condições de cima para baixo e executa somente o primeiro ramo correspondente. Diferentemente de switch/case em outras linguagens, o elseif de Lua é uma única palavra-chave (não 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

Operadores lógicos em condições

Lua usa and, or e not como operadores lógicos. Eles usam avaliação em curto-circuito: and retorna o primeiro valor falso ou o último valor; or retorna o primeiro valor verdadeiro ou o último valor. Isso permite padrões idiomáticos de valor padrão.

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

Padrão ternário com and/or

Lua não tem um operador ternário, mas o padrão and/or fornece uma aproximação: condition and trueVal or falseVal. Isso funciona desde que trueVal não seja false nem nil. Para uma lógica ternária mais segura, use uma função if em linha.

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

Instruções if aninhadas

Você pode aninhar instruções if dentro de outros ramos. Cada bloco aninhado exige seu próprio end. Um aninhamento profundo geralmente indica uma oportunidade de usar retornos antecipados ou cláusulas de guarda para simplificar a lógica.

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

Cláusulas de guarda

Uma cláusula de guarda é um retorno antecipado que trata casos inválidos ou extremos no início de uma função, reduzindo o aninhamento. Esse padrão mantém o código do "caminho feliz" sem indentação adicional e mais fácil de ler.

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

Comparação de valores

Operadores de comparação de Lua: == (igual), ~= (diferente), <, >, <=, >=. Observação: ~= é o operador de "diferente" de Lua — não !=. As comparações de strings usam ordem lexicográfica. Não é possível comparar strings diretamente com números.

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

Igualdade de strings

Duas strings são iguais em Lua se, e somente se, tiverem o mesmo conteúdo em bytes e o mesmo comprimento. Lua armazena strings internamente, portanto strings iguais geralmente apontam para a mesma área de memória, tornando == uma comparação rápida de ponteiros. Nunca compare strings com is nem usando igualdade de referências — == sempre compara por valor.

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

Comparação de tabelas e funções

Tabelas e funções são comparadas por referência, não por conteúdo. Dois literais de tabela diferentes com conteúdo idêntico não são iguais, a menos que sejam o mesmo objeto. Use métodos metamágicos como __eq para definir uma igualdade personalizada para tabelas.

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

Padrões idiomáticos

Padrões comuns de Lua com condicionais: use assert() para validar pré-condições, use o truque and/or para valores padrão curtos e evite duplas negações (not not x) para converter qualquer valor em 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ção rápida

Quais valores são falsos em Lua?

Recapitulação: condicionais

Resumo:

  • if ... elseif ... else ... end — a forma completa de ramificação
  • Apenas nil e false são falsos
  • and/or usam curto-circuito e retornam os valores dos operandos
  • ~= significa "diferente" em Lua (não !=)
  • Tabelas e funções são comparadas por referência; strings, por valor
  • Use cláusulas de guarda para reduzir o aninhamento

Perguntas Frequentes

A aula “Instruções if, elseif e else” é grátis?

Sim — o texto completo de “Instruções if, elseif e else” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Instruções if, elseif e else”?

Escreva lógica de ramificação condicional com a sintaxe if/elseif/else do Lua. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Instruções if, elseif e else”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Instruções if, elseif e else
  2. Laços while e repeat-until
  3. Laço for numérico
  4. for genérico e break
← Voltar para Lua Academy