Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Comando if
  2. Comando if-else
  3. Comando if-else-if
  4. Comandos de decisão

Lua possui os seguintes comandos de decisão: if, if-else e if-else-if. Esses podem ser aninhados ou não. Diferente de outras linguagens no estilo-C, Lua utiliza then e end para definição do corpo do comando.

No comando if uma condição é verificada retornando true ou false. Caso a condição seja true, o bloco de código contido dentro do comando é executado.

Fig. 1: Fluxograma Comando if
Sintaxe
if ( condicao ) then
   -- código
end
Onde
condicao: expressão que retorna um boolean
Exemplo 1
local x = 10
local y = 5

if ( x > y) then
  print(x)
end

Saída
10

A condição entre ( e ) pode ser composta de várias expressões, incluíndo chamadas à funções, utilizando os operadores lógicos são estudados.

Exemplo 1.1: mais de uma condição
x = 1 
y = "string" 
z = true

if x == 1 or y == "string" and z == true then
  print(x, y, z)
end
Saída
1	string	true
Exemplo 1.2: função como argumeto
function funcao(parameto)
  return parameto > 0
end

parametro = 10
if(funcao(parametro)) then
  print(parametro)
end
Saída
10

No comando if-else uma condição é verificada retornando true ou false. Caso a condição seja true, o bloco de código contido dentro do comando if é executado. Caso contrário, o código contido no corpo do comando else é executado.

Fig. 2: Fluxograma Comando if-else
Sintaxe
if (condicao) then
 --declarações para condição true
else
 --declarações para condição false
end
Onde
condicao: expressão que retorna um boolean
Exemplo 2
local x = 10
local y = 20

if ( x > y) then
  print(x)
else
  print(y)
end

Saída
20

A condição entre ( e ) pode ser composta de várias expressões utilizando os operadores relacionais e lógicos já estudados.

O comando if-else-if aninhado é a junção dos comando if e if/else estudados acima. Utilizado quando é necessário realizarmos validações em cascata.

Fig. 3: Fluxograma Comando if-elseif
Sintaxe
if ( condicao1) then
 -- declarações p/ condicao1 == true
elseif ( condicao2) then
 -- declarações p/ condicao2 == true
elseif ( condicao3) then
 -- declarações p/ condicao3 == true
else
 -- declarações quando condicao1, 2 e 3  == false
end
Onde
 condicao1..3: expressão que retorna um boolean
Exemplo 3
local x = 15

if ( x == 0) then
  print(0)
elseif (x == 5) then
  print(5)
elseif (x == 10) then
  print(10)
else
  print("valor invalido")
end
Saída
valor invalido

A condição entre ( e ) pode ser composta de várias expressões utilizando os operadores relacionais e lógicos já estudados.

Lua, diferente de linguagens estilo-C não fornece um operador if ternário (?:). A simulação desse operador é feito como na sintaxe mostrada abaixo:

Sintaxe
nome_variavel = condicao and valor_se_true or <valor_se_falso>
Exemplo 4
local media = 5
res = media >= 5 and "aprovado" or "reprovado"
print(res)
Saída
aprovado

Em determinadas situações precisamos realizar atribuições simples com o comando if-else em que os valores true ou false devem ser atribuídos.

Exemplo 5
b = 10 
a = nil

if a == 10 then
  a = true
else
  a = false 
end

print(a)
Saída
true

Como os operadores relacionais e lógicos de Lua retornam true ou false como resultado, podemos declarar uma atribuição diretamente sem o uso do comando if-else:

Exemplo 6
b = 10 
a = nil

a = b == 10
Saída
true

Como na maioria das linguagens, os comandos de decisão acimas podem ser declarados de forma aninhada(Nested).

Exemplo 6
if (condicao)  then
	--declarações se condicao == true
	if (condicao2) then
		--declarações se condicao2 == true
	else
		--declarações se condicao2 == false
		if (condicao3) then
			--declarações se condicao3 == true
		elseif (condicao4) then
			--declarações se condicao4 == true
		elseif (condicao5) then
                        --declarações se condicao5 == true
		else
			--declarações se condicao3,4 e 5  == false
		end
	end
end
Saída
-
  1. 11/12/2025 - revisão 4 - Adição: Ex 1.1, Ex.2, "if ternário" e retorno de operador
  2. 15/09/2025 - revisão 3 - Ajustes: pontuais, sintaxes, objetivos e target de links internos
  3. 12/09/2024 - revisão 2 - Ajustes gramaticais
  4. 03/10/2023 - revisão 1 - Correção em referências, erros gramaticais e adição de fluxogramas
  5. 26/05/2023 - versão inicial