Módulo 12 - Funções, as máquinas do algoritmo

Retorno: o que sai da máquina

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 02/07/2026

O que você vai aprender

  • Entender o retorne como a saída oficial da máquina.
  • Guardar o valor retornado numa variável e usá-lo em contas seguintes.
  • Diferenciar retornar (devolver para o algoritmo) de escrever (mostrar na tela).
  • Reconhecer procedimentos: funções que fazem trabalho sem devolver valor.

A vitamina precisa sair do copo

Até aqui a nossa máquina recebe ingredientes e trabalha, mas falta o gesto final: servir o resultado. Em funções, esse gesto é o comando retorne. Quando a execução encontra retorne resultado, duas coisas acontecem de uma vez: o valor viaja de volta para o ponto exato da chamada, e a função encerra na hora, ignorando qualquer linha que exista depois. É o garçom colocando a vitamina no seu lado do balcão: o trabalho da cozinha terminou, e agora o valor é seu para beber, guardar ou misturar em outra receita.

função dobro(numero)
  retorne numero * 2
fim função

valor <- dobro(7)      // a chamada vira 14, e 14 entra na caixa valor
escreva(valor)          // mostra: 14
escreva(dobro(50))      // mostra: 100 (o retorno alimenta o escreva direto)

O retorno volta para o ponto da chamada: dá para guardar em variável ou usar na hora.

A linha valor <- dobro(7) merece uma leitura em câmera lenta, porque junta tudo o que o módulo ensinou. Primeiro, o algoritmo pula para dentro da máquina dobro levando o argumento 7. Lá dentro, o parâmetro numero vale 7, a conta produz 14 e o retorne devolve esse 14. De volta ao ponto da chamada, a expressão dobro(7) É o 14, e a atribuição do módulo 3 guarda o valor na caixa. Chamada de função vira valor: essa é a ideia que destrava o resto do curso.

Retornar não é escrever na tela

Chegou a hora de desarmar a confusão mais teimosa deste módulo: retornar e escrever parecem irmãos, mas atendem clientes diferentes. O escreva mostra algo para a PESSOA que está na frente da tela; o valor aparece e evapora, o algoritmo não consegue reaproveitá-lo. O retorne entrega o valor para o ALGORITMO que fez a chamada; a pessoa não vê nada, mas o programa agora tem o resultado na mão para somar, comparar ou guardar. Uma função que escreve o resultado em vez de retorná-lo é uma cozinha que grita “ficou pronto!” sem nunca servir o prato.

retorne resultado

  • Entrega o valor para quem chamou a função.
  • O valor pode ser guardado: media <- calcular_media(7, 9).
  • Serve para o algoritmo continuar a conta.
  • Invisível para a pessoa, essencial para o programa.

escreva(resultado)

  • Mostra o valor na tela e pronto.
  • Nada sobra para guardar: a informação evapora.
  • Serve para a pessoa ler o resultado final.
  • Visível para a pessoa, inútil para a conta seguinte.

🎮 Jogo da aula

A máquina de troco enlouqueceu

A padaria reclama: o troco está saindo negativo. Uma única linha está errada. Toque nela.

O bug do jogo ilustra uma disciplina de detetive: quando a saída vem errada, siga o caminho do valor. O argumento chegou certo ao parâmetro? A conta interna está correta? O retorne devolve a variável certa? No caso do troco, a estrutura inteira estava saudável e o defeito morava na fórmula, o tipo de erro que o teste de mesa do módulo 13 pega em segundos. Guarde o método: valor entra, valor se transforma, valor sai. O bug mora em uma dessas três estações.

As máquinas que não devolvem nada

Nem toda função precisa devolver um valor. A boas_vindas da aula 1 mostra mensagens e termina: o efeito dela acontece na tela, não numa caixa de memória. Funções assim são chamadas de procedimentos: fazem um trabalho visível (imprimir um recibo, mostrar um menu, tocar um alerta) sem produzir valor para guardar. A campainha de casa é o exemplo perfeito: apertar o botão causa um efeito, o toque, mas não sobra nada na sua mão. O escreva, olhado de novo, é um procedimento; o leia é uma função com retorno. Você usava os dois tipos sem saber o nome.

Teste rápido

A função calcular_media faz a conta e usa escreva para mostrar o resultado, sem retorne. Qual é a limitação prática?

Perguntas frequentes

O que acontece com as linhas depois do retorne?
Nada: elas nunca executam. O retorne encerra a função no ato, como o garçom que já serviu o prato e voltou para o salão. Linhas após um retorne incondicional são código morto, e encontrá-las num programa é sinal de descuido ou de sobra de alguma edição antiga.
Uma função pode ter mais de um retorne?
Pode, geralmente um por caminho de decisão: SE a nota for maior ou igual a 7, retorne “aprovado”, SENÃO retorne “recuperação”. Só um deles executa por chamada, porque o primeiro retorne alcançado encerra a máquina. É um jeito limpo de combinar as decisões do módulo 8 com funções.
Posso usar o retorno de uma função como argumento de outra?
Pode, e isso encadeia máquinas: escreva(dobro(7)) manda o 14 retornado direto para a boca do escreva, sem variável no meio. É a esteira da fábrica: a saída de uma máquina alimenta a entrada da seguinte. Se a leitura ficar confusa, uma variável intermediária resolve.
A função pode retornar texto ou valor lógico, ou só número?
Qualquer tipo do módulo 3: número, texto ou lógico (V ou F). Funções que retornam V ou F são especialmente úteis nas decisões, como eh_par(numero) dentro de um SE. Ela pode até retornar uma lista inteira do módulo 11.
O que a chamada recebe quando a função é um procedimento, sem retorne?
Nada aproveitável. Tentar guardar o resultado, como em x <- mostrar_menu(), deixa a caixa vazia ou indefinida, dependendo da linguagem. No pseudocódigo do curso, tratamos como erro de lógica: se não há retorno, não há o que atribuir.
retorne e escreva podem aparecer na mesma função?
Podem, quando a função precisa avisar algo no meio do trabalho e ainda devolver o resultado. Mas cuidado com o hábito: misturar cálculo e exibição na mesma máquina dificulta o reuso. O desenho mais limpo, que a aula 4 defende, é calcular numa função e mostrar em outra.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.