📦 Programação Procedural

Organize código em procedimentos reutilizáveis!

🔨

O que é programação procedural?

Programação procedural organiza código em funções (procedimentos) que podem ser chamadas múltiplas vezes. É uma evolução da programação imperativa, adicionando modularidade e reutilização.

Características

Exemplo básico: Funções utilitárias

-- Procedimento simples
função saudacao(nome)
    exiba("Olá, " .. nome .. "!")
fim

-- Função com retorno
função soma(a, b)
    retorne a + b
fim

-- Usando as funções
saudacao("Maria")
local resultado = soma(10, 20)
exiba(resultado)  -- 30

Exemplo: Calculadora modular

-- Operações básicas
função adicione(a, b)
    retorne a + b
fim

função subtraia(a, b)
    retorne a - b
fim

função multiplique(a, b)
    retorne a * b
fim

função divida(a, b)
    se b == 0 então
        retorne nulo, "Divisão por zero!"
    fim
    retorne a / b
fim

-- Função de alto nível
função calcule(operacao, a, b)
    se operacao == "+" então retorne adicione(a, b) fim
    se operacao == "-" então retorne subtraia(a, b) fim
    se operacao == "*" então retorne multiplique(a, b) fim
    se operacao == "/" então retorne divida(a, b) fim
    retorne nulo, "Operação inválida"
fim

-- Usando
exiba(calcule("+", 10, 5))   -- 15
exiba(calcule("*", 3, 7))    -- 21

Exemplo: Processamento de lista

-- Função para filtrar números pares
função filtre_pares(lista)
    local resultado = {}
    para i, valor em obtenha_pares_indexados(lista) faça
        se valor % 2 == 0 então
            tabela.insira(resultado, valor)
        fim
    fim
    retorne resultado
fim

-- Função para somar lista
função some_lista(lista)
    local soma = 0
    para i, valor em obtenha_pares_indexados(lista) faça
        soma = soma + valor
    fim
    retorne soma
fim

-- Função para exibir lista
função exiba_lista(lista)
    exiba(tabela.concatene(lista, ", "))
fim

-- Pipeline de processamento
local numeros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
local pares = filtre_pares(numeros)
local soma = some_lista(pares)

exiba("Números pares:")
exiba_lista(pares)  -- 2, 4, 6, 8, 10
exiba("Soma: " .. soma)  -- 30

Exemplo: Sistema de validação

-- Validadores
função valide_email(email)
    retorne texto.encontre(email, "@") e texto.encontre(email, "%.")
fim

função valide_idade(idade)
    retorne idade >= 0 e idade <= 150
fim

função valide_nome(nome)
    retorne texto.obtenha_comprimento(nome) >= 2
fim

-- Função principal de validação
função valide_usuario(nome, idade, email)
    se não valide_nome(nome) então
        retorne falso, "Nome inválido"
    fim

    se não valide_idade(idade) então
        retorne falso, "Idade inválida"
    fim

    se não valide_email(email) então
        retorne falso, "Email inválido"
    fim

    retorne verdadeiro, "Válido"
fim

-- Testando
local ok, msg = valide_usuario("Ana", 25, "ana@exemplo.com")
exiba(ok, msg)  -- verdadeiro, "Válido"

Vantagens da programação procedural

Programação procedural é a base para código organizado e manutenível!
```