Lógica de ProgramaçãoFundamental· 8 min de leitura

Funções e Modularização: dividir para conquistar

Funções são o principal mecanismo para organizar e reutilizar código. Modularizar é a arte de dividir um problema grande em partes menores e gerenciáveis.

RF

Renato Freitas

Atualizado em 27 de abril de 2026

O que é uma função?

Uma função é um bloco de código nomeado que executa uma tarefa específica. Você a define uma vez e pode chamá-la quantas vezes quiser, de qualquer ponto do programa, sem reescrever a lógica.

Imagine que você precisa calcular a média de notas em cinco lugares diferentes do programa. Sem funções, você copiaria a mesma fórmula cinco vezes — e se precisasse corrigir um erro, teria que alterar em todos os cinco lugares. Com uma função calcularMedia, você corrige em um lugar e todos os usos se beneficiam automaticamente.

Funções tornam o código mais legível, mais fácil de testar e mais fácil de manter. Um programa bem modularizado lembra uma caixa de ferramentas: cada ferramenta tem uma função clara, e você usa a ferramenta certa para cada trabalho.

🧮 Teste você mesmo — CalcSim

Quer mais recursos? Baixar app CalcSim IA

Parâmetros e retorno: entrada e saída da função

Parâmetros são as informações que você passa para a função trabalhar. São declarados entre parênteses na definição da função e funcionam como variáveis locais dentro dela. Exemplo: em calcularMedia(nota1, nota2), tanto nota1 quanto nota2 são parâmetros.

O retorno é o resultado que a função devolve para quem a chamou. Em muitas linguagens, usa-se a palavra-chave retorne (ou return). Exemplo completo: calcularMedia(nota1, nota2) { retorne (nota1 + nota2) / 2 }. Quem chama a função recebe o valor calculado e pode armazená-lo ou usá-lo diretamente.

Nem toda função precisa de parâmetros ou retorno. Uma função exibirBoasVindas() pode simplesmente imprimir uma mensagem sem receber nem devolver nada. A escolha depende do que a função precisa fazer.

  • Parâmetro: variável na definição da função (o que ela espera receber).
  • Argumento: o valor concreto passado ao chamar a função (o que você realmente passa).
  • Retorno: o valor que a função devolve. Sem retorno explícito, a função devolve nulo (null/void).
  • Uma função pode ter zero, um ou vários parâmetros, mas idealmente não mais que 3 ou 4 — acima disso, considere agrupar os dados em um objeto.

Escopo de variáveis: onde cada variável existe

Escopo define onde uma variável pode ser acessada. Variáveis criadas dentro de uma função são locais — existem apenas durante a execução da função e desaparecem após o retorno. Variáveis globais existem em todo o programa.

Exemplo: se você declara total = 0 dentro da função calcularSoma, essa variável não existe fora da função. Tentar acessá-la fora causará um erro. Isso é intencional — o escopo local evita que funções diferentes interfiram umas nas outras.

Variáveis globais parecem convenientes, mas tornam o código difícil de entender e depurar, porque qualquer parte do programa pode modificá-las. A boa prática é preferir variáveis locais e passar dados via parâmetros.

  • Escopo local: variável existe apenas dentro da função onde foi criada.
  • Escopo global: variável existe em todo o programa. Use com moderação.
  • Shadowing: quando uma variável local tem o mesmo nome de uma global, a local prevalece dentro da função.

Por que modularizar? Os princípios do bom design

Modularização é a prática de dividir um programa em funções pequenas, cada uma com responsabilidade única e bem definida. Um programa modular é mais fácil de ler, testar, corrigir e evoluir.

O princípio da responsabilidade única diz: cada função deve fazer uma coisa só, e fazê-la bem. Uma função calcularDesconto não deveria também salvar no banco de dados. Misturar responsabilidades cria funções difíceis de reutilizar e de testar.

Quando uma função passa de 20 a 30 linhas, é sinal de que ela está fazendo coisas demais. Divida-a em funções menores. Uma boa função cabe inteira na tela e pode ser entendida em segundos.

  • DRY (Don't Repeat Yourself): se você copiou e colou código, é hora de criar uma função.
  • Função pura: não modifica variáveis externas e sempre retorna o mesmo resultado para os mesmos parâmetros. Mais fácil de testar.
  • Nomeie funções com verbos: calcular, validar, exibir, buscar. O nome deve dizer o que a função faz.

Recursão: funções que chamam a si mesmas

Recursão é quando uma função chama a si mesma para resolver um problema menor. É uma técnica poderosa para problemas que têm estrutura repetitiva e podem ser divididos em casos menores do mesmo tipo.

O exemplo clássico é o fatorial. O fatorial de 5 (escrito 5!) é 5 × 4 × 3 × 2 × 1 = 120. A definição recursiva é: fatorial(n) = n × fatorial(n - 1), com o caso base fatorial(1) = 1. Em pseudocódigo: fatorial(n) { se n <= 1 retorne 1; retorne n * fatorial(n - 1) }.

Toda função recursiva precisa de um caso base — a condição que faz a recursão parar. Sem caso base, a função chama a si mesma infinitamente até estourar a memória (stack overflow). Com o caso base correto, a recursão se resolve como uma pilha de chamadas que vai sendo desfeita de baixo para cima.

  • Caso base: a condição de parada. Sem ela, a recursão é infinita.
  • Caso recursivo: a chamada da função sobre um problema menor.
  • Pilha de chamadas: cada chamada recursiva ocupa memória. Para n muito grande, prefira a versão iterativa (com loop).
  • Recursão brilha em estruturas como árvores, listas ligadas e algoritmos de divisão e conquista.

Perguntas frequentes

Qual a diferença entre parâmetro e argumento?

Parâmetro é a variável declarada na definição da função — é o nome que a função usa internamente. Argumento é o valor concreto passado quando a função é chamada. Em calcularMedia(nota1, nota2), nota1 e nota2 são parâmetros. Quando você chama calcularMedia(8, 6), os valores 8 e 6 são os argumentos. Na prática, muitos programadores usam os dois termos de forma intercambiável.

Recursão é sempre melhor que loop?

Não. Recursão é elegante para certos problemas (árvores, divisão e conquista, algoritmos matemáticos), mas consome mais memória do que um loop, pois cada chamada ocupa espaço na pilha. Para cálculos simples como fatorial ou somatório, um loop for é mais eficiente. Use recursão quando ela deixar o código significativamente mais claro e o problema tiver profundidade razoável.

Quantos parâmetros uma função deve ter?

O ideal é no máximo 3 parâmetros. Funções com muitos parâmetros são difíceis de usar e de lembrar a ordem correta. Se precisar de mais dados, agrupe-os em um objeto ou estrutura e passe o objeto como parâmetro. Isso também facilita adicionar campos no futuro sem alterar a assinatura da função.

Este artigo foi útil para você?

Avalie com estrelas para nos ajudar a melhorar o conteúdo.

Faça login para avaliar este artigo.

Ainda tem dúvida?

O Professor IA explica passo a passo

Faça uma pergunta em linguagem natural e receba uma explicação personalizada sobre Lógica de Programação — ou qualquer outro tópico.

Prefere resolver pelo celular?

Baixar o app grátis →

Continue aprendendo