🎯 Funções
Funções são como receitas: você cria uma vez e usa quantas vezes quiser!
🎯O que é uma função?
Imagine que você quer fazer bolo de chocolate várias vezes. Seria chato lembrar da receita toda vez, né?
Com funções, você escreve as instruções uma vez e depois é só chamar pelo nome!
Criando sua primeira função
função diga_oi()
exiba("Olá! 👋")
fim
-- Agora vamos usar!
diga_oi() -- Mostra: Olá! 👋
diga_oi() -- Mostra: Olá! 👋
Funções com parâmetros
Funções podem receber informações:
função diga_oi_para(nome)
exiba("Olá, " .. nome .. "!")
fim
diga_oi_para("Maria") -- Mostra: Olá, Maria!
Funções que devolvem algo (retorno)
função soma(a, b)
retorne a + b
fim
local resultado = soma(5, 3)
exiba(resultado) -- Mostra: 8
Múltiplos retornos
No Sol, funções podem devolver várias coisas de uma vez!
função divide_com_resto(a, b)
local quociente = a // b
local resto = a % b
retorne quociente, resto
fim
local q, r = divide_com_resto(17, 5)
exiba("17 ÷ 5 = " .. q .. " resto " .. r)
-- Mostra: 17 ÷ 5 = 3 resto 2
Argumentos variáveis (...)
Quer receber qualquer quantidade de valores? Use ...:
função soma_tudo(...)
local args = {...}
local total = 0
para i, v em obtenha_pares_indexados(args) faça
total = total + v
fim
retorne total
fim
exiba(soma_tudo(1, 2, 3)) -- 6
exiba(soma_tudo(10, 20, 30, 40)) -- 100
Funções anônimas
Funções sem nome! Úteis para passar como argumento:
-- Função normal
função dobro(x) retorne x * 2 fim
-- Mesma coisa, mas anônima guardada em variável
local dobro = função(x) retorne x * 2 fim
exiba(dobro(5)) -- 10
Closures (Funções que lembram)
Uma closure é uma função que "lembra" das variáveis de onde foi criada:
função cria_contador()
local contagem = 0
retorne função()
contagem = contagem + 1
retorne contagem
fim
fim
local contador = cria_contador()
exiba(contador()) -- 1
exiba(contador()) -- 2
exiba(contador()) -- 3
A função interna "lembra" da variável
contagem mesmo depois que cria_contador terminou!
Exemplo prático: Fábrica de multiplicadores
função cria_multiplicador(fator)
retorne função(numero)
retorne numero * fator
fim
fim
local dobro = cria_multiplicador(2)
local triplo = cria_multiplicador(3)
exiba(dobro(5)) -- 10
exiba(triplo(5)) -- 15
Funções são super poderosas no Sol! Closures permitem criar código flexível e reutilizável.