Declarações de Atribuição
Lua permite atribuição múltipla de variáveis, com listas separadas por vírgulas:
valor1, valor2 = 15, 3 * elemento
A troca de valores entre variáveis utiliza avaliação paralela:
dadoA, dadoB = dadoB, dadoA -- Troca valores
Regras para desequilíbrio de elemetnos:
• Variáveis excedentes recebem nil
• Valores excedentes são ignorados
Estruturas de Controle
Condicionais aceitam qualquer valor, considerando false e nil como falsos:
if condicao then
-- Bloco verdadeiro
elseif outra_condicao then
-- Bloco alternativo
end
Estruturas de repetição:
while condicao do
-- Executa enquanto verdadeiro
end
repeat
-- Executa até condição satisfeita
until condicao
Laços numéricos:
for contador = inicio, fim, passo do
-- Bloco iterativo
end
Variáveis de controle são locais e imutáveis durante a execução.
Iteração genérica com pares chave-valor:
for indice, valor in ipairs(colecao) do
print(valor)
end
for chave in pairs(tabela) do
print(chave)
end
Gerenciamento de Fluxo
break encerra laços imediatamente, return finaliza funções. Devem ser usados no final de blocos:
local contador = 1
while lista[contador] do
if lista[contador] == alvo then break end
contador = contador + 1
end
Alternativas para construções ausentes:
-- Substituição de switch
acoes = {
opcao1 = function(x) return x * 2 end,
opcao2 = function(x) return x + 5 end
}
acoes[selecao](entrada)
Definição de Funções
function calcular(parâmetros)
-- Corpo da função
end
Chamadas com argumentos insuficientes completam com nil, excedentse são descartados.
Retornos Múltiplos
Funções podem retornar vários valores:
function encontrar_maximo(numeros)
local indice_max = 1
local maximo = numeros[1]
for i, num in ipairs(numeros) do
if num > maximo then
indice_max = i
maximo = num
end
end
return maximo, indice_max
end
unpack converte tabelas em listas de valores:
function desempacotar(t, i)
i = i or 1
if t[i] then
return t[i], desempacotar(t, i + 1)
end
end
Parâmetros Variáveis
Funções recebem argumentos variáveis através da tabela arg:
function processar(...)
for i, v in ipairs(arg) do
-- Manipulação de argumentos
end
end
Funções como Valores
Funções são cidadãos de primeira classe:
operacao = math.sin
print(operacao(1.57)) --> ~1
Funções aônimas:
dobrar = function(x) return x * 2 end
Closures
Funções internas acessam variáveis externas:
function novo_contador()
local contagem = 0
return function()
contagem = contagem + 1
return contagem
end
end
Chamadas de Cauda
Chamadas finais otimizadas não consomem espaço de pilha:
function sala1()
local movimento = io.read()
if movimento == "norte" then
return sala2()
end
end