Conceitos Fundamentais de Sintaxe e Funções em Lua

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

Tags: Lua SintaxeLua funções Closure ControleFluxo

Publicado em 6-7 18:43 por Thomas