Funções
Funções são blocos de código reutilizáveis que recebem dados, processam e retornam um resultado.
Declarando uma função
jd
funcao somar(a: numero, b: numero) -> numero
retornar a + b
fimAnatomia:
funcao— palavra-chave de declaraçãosomar— nome da função(a: numero, b: numero)— parâmetros com seus tipos-> numero— tipo do valor retornadoretornar a + b— instrução de retornofim— encerra a função
Chamando uma função
jd
resultado = somar(10, 5)
Console.escrever(resultado) // 15
// Ou diretamente
Console.escrever(somar(3, 7)) // 10Funções sem retorno
Se a função não retorna nada, omita o ->:
jd
funcao registrarLog(mensagem: texto)
Console.escrever("[LOG] " + mensagem)
fim
registrarLog("Sistema iniciado")
// [LOG] Sistema iniciadoFunções sem parâmetros
jd
funcao saudacao()
Console.escrever("Bem-vindo ao sistema!")
fim
saudacao()Retorno antecipado
Use retornar para sair da função antes do fim:
jd
funcao dividir(a: numero, b: numero) -> numero
se b == 0
erro "Divisão por zero não é permitida"
fim
retornar a / b
fimEm funções sem retorno, retornar sozinho encerra a execução:
jd
funcao processar(valor: numero)
se valor < 0
Console.escrever("Valor negativo — ignorado")
retornar
fim
Console.escrever("Processando: " + valor)
fimParâmetros
Múltiplos parâmetros
jd
funcao criarMensagem(nome: texto, saudacao: texto, pontuacao: texto) -> texto
retornar saudacao + ", " + nome + pontuacao
fim
Console.escrever(criarMensagem("Maria", "Olá", "!")) // "Olá, Maria!"Parâmetros do tipo entidade
Você pode passar entidades como parâmetros:
jd
funcao exibirProduto(produto: Produto)
Console.escrever("Nome: " + produto.nome)
Console.escrever("Preço: R$ " + produto.preco)
Console.escrever("Estoque: " + produto.estoque)
fimParâmetros do tipo lista
jd
funcao contarAtivos(produtos: lista<Produto>) -> numero
ativos = 0
para produto em produtos
se produto.ativo
ativos = ativos + 1
fim
fim
retornar ativos
fimRetornando entidades
Funções podem criar e retornar entidades:
jd
funcao criarProduto(nome: texto, preco: decimal) -> Produto
p = Produto()
p.nome = nome
p.preco = preco
p.ativo = verdadeiro
retornar p
fim
notebook = criarProduto("Notebook", 3500.00)
Console.escrever(notebook.nome) // "Notebook"Retornando listas
jd
funcao filtrarBaratos(produtos: lista<Produto>, limite: decimal) -> lista<Produto>
resultado = lista()
para produto em produtos
se produto.preco <= limite
resultado.adicionar(produto)
fim
fim
retornar resultado
fimSinalizando erros
Use erro para interromper a execução quando algo deu errado:
jd
funcao buscarCliente(clienteId: id) -> Cliente
cliente = EntityManager.buscarPorId(Cliente, clienteId)
se nao cliente
erro "Cliente não encontrado: " + clienteId
fim
retornar cliente
fimQuando usar erro
Use erro para situações inesperadas que impedem a continuação — dados inválidos, registros não encontrados, violações de regra de negócio.
Funções como parte de serviços
Na prática, funções raramente ficam soltas. Elas pertencem a serviços:
jd
servico ProdutoService
funcao criar(nome: texto, preco: decimal) -> Produto
se nome.tamanho() < 2
erro "Nome muito curto"
fim
se preco <= 0
erro "Preço inválido"
fim
p = Produto()
p.nome = nome
p.preco = preco
p.ativo = verdadeiro
salvar p
retornar p
fim
funcao desativar(produtoId: id)
p = EntityManager.buscarPorId(Produto, produtoId)
p.ativo = falso
salvar p
emitir ProdutoDesativado(p.id)
fim
fimFunções dentro de serviços são chamadas assim:
jd
produto = ProdutoService.criar("Cadeira", 450.00)
ProdutoService.desativar(produto.id)Boas práticas
Uma função, uma responsabilidade:
jd
// Ruim — faz muitas coisas
funcao processarPedidoCompleto(pedido: Pedido)
validar(pedido)
calcularTotal(pedido)
aplicarDesconto(pedido)
salvar pedido
enviarEmail(pedido)
atualizarEstoque(pedido)
fim
// Bom — cada função faz uma coisa
funcao validarPedido(pedido: Pedido) -> booleano
retornar pedido.clienteId != ""
fim
funcao calcularTotal(pedido: Pedido) -> decimal
retornar pedido.valorTotal
fim
funcao aplicarDesconto(pedido: Pedido, taxa: decimal) -> decimal
retornar pedido.valorTotal * (1 - taxa)
fimNomes descritivos:
jd
// Ruim
funcao proc(p: Produto) -> booleano
retornar p.estoque > 0
fim
// Bom
funcao verificarDisponibilidade(produto: Produto) -> booleano
retornar produto.estoque > 0
fim