Capítulo 18: Funções II: Parâmetros e Retorno Tipado (Modularização II)
🎯 Objetivo da Aula
Enquanto uma Função vazio apenas executa uma ação na tela sem devolver nada para quem a chamou, uma Função com Retorno é uma máquina matemática: ela recebe dados de entrada (parâmetros), processa o cálculo internamente e devolve um resultado concreto (retorno) que pode ser guardado em uma variável ou utilizado em fórmulas matemáticas complexas.
Nesta aula, você aprenderá a:
- Compreender a diferença conceitual entre Função
vazioe Função Tipada com Retorno. - Dominar a sintaxe:
funcao tipo_retorno Nome(parametros) { ... retorne resultado }. - Utilizar o comando
retorneno Portugol Studio. - Construir uma Biblioteca de Funções Tarifárias e Matemáticas Puras.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_18.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_18.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O departamento de engenharia tarifária da FastLog precisa padronizar os cálculos de frete de toda a empresa. A fórmula do frete é composta por: $$\text{FreteBase} = (\text{DistanciaKm} \times 3.50) + (\text{PesoKg} \times 0.80)$$ $$\text{FreteComSeguro} = \text{FreteBase} \times 1.015 \quad (\text{Acréscimo de 1.5%})$$ Se cada programador escrever essa conta manualmente em diferentes partes do sistema, qualquer reajuste de tarifas causará divergências financeiras.
Missão: Você deve construir a Biblioteca Central de Funções Tarifárias, criando funções com retorno tipado para cálculo de frete base, seguro e conversão monetária internacional.
🧠 Fundamentos: Funções Tipadas na Computação
1. Função vazio vs Função Tipada
| Característica | Função sem Retorno (funcao vazio) | Função Tipada (funcao real / inteiro / ...) |
|---|---|---|
| Gera valor de resposta? | ❌ Não. Apenas executa ações na tela. | ✅ Sim. Devolve obrigatoriamente um valor tipado. |
| Instrução de Saída | Não possui. | Exige o comando retorne valor. |
| Pode ser guardada em variável? | ❌ Não (x = imprimir() gera erro de compilação!). | ✅ Sim (x = calcular_total(10, 20)). |
Pode ser usada dentro de um se? | ❌ Não. | ✅ Sim (se (validar_senha(s) == verdadeiro)). |
graph LR
subgraph Chamada ["funcao inicio()"]
Input["Parâmetros: peso=500.0, km=200.0"] --> Func["Chama: calcular_frete(500.0, 200.0)"]
end
subgraph Processamento ["funcao real calcular_frete()"]
Func --> Proc["Processa fórmula tarifária"]
Proc --> Ret["retorne 1100.00"]
end
Ret --> Output["Variável 'total' recebe: R$ 1100.00"]
style Input fill:#2980b9,stroke:#fff,color:#fff
style Func fill:#8e44ad,stroke:#fff,color:#fff
style Ret fill:#27ae60,stroke:#fff,color:#fff
style Output fill:#217346,stroke:#fff,color:#fff2. A Sintaxe no Portugol Studio
O tipo de retorno pode ser qualquer um dos cinco tipos primitivos do Portugol Studio — inclusive cadeia, para funções que devolvem texto pronto para exibição:
📖 Exemplo Guiado: Motor Tarifário com Funções Puras
Código do Programa:
✅ Exemplo de Execução no Console (Shift + F6):
🛠️ Prática Obrigatória 1: Função de Validação de Placa Mercosul
Passo 1: O Desafio
Utilizando a biblioteca Texto, crie uma função booleana:
funcao logico validar_tamanho_placa(cadeia placa)
A função deve retornar verdadeiro se o tamanho da placa for exatamente 7 caracteres (txt.numero_caracteres(placa) == 7), ou falso caso contrário.
No inicio(), leia uma placa e utilize a função dentro de um se.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Calculadora de Performance Ponderada
Crie uma função funcao real calcular_score(real pont, real seg, real econ) que calcule a média ponderada com os seguintes pesos:
- Pontualidade: Peso 4
- Segurança: Peso 4
- Economia Diesel: Peso 2 $$\text{Score} = \frac{(\text{pont} \times 4) + (\text{seg} \times 4) + (\text{econ} \times 2)}{10}$$
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_SeuNome_SeuSobrenome.por. - Certifique-se de que todas as funções tipadas possuem a instrução
retorne. - No Microsoft Teams, envie na tarefa “Portugol Cap 18 - Parâmetros e Retorno”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Funções Puras (Pure Functions). Em programação funcional e arquiteturas modernas de microsserviços (como AWS Lambda e Google Cloud Functions), as funções são desenhadas sem efeitos colaterais: recebem dados por parâmetro e retornam novos dados com total previsibilidade.
🔥 Desafio de Fixação: Conversor de Moeda Internacional
Crie uma função funcao real converter_dolar(real valorUSD, real cotacao) que receba um valor em dólares e a cotação do dia, retornando o valor convertido em Reais (BRL).
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Qual é a principal diferença entre uma Função
vazioe uma Função Tipada com Retorno, segundo a tabela comparativa dos Fundamentos? - Qual comando obrigatório uma Função Tipada deve usar para devolver seu resultado, e onde ele se posiciona na sintaxe de declaração da função?
- Segundo a tabela comparativa dos Fundamentos, uma função
vaziopode ser usada dentro de uma condiçãose, comose (validar_senha(s) == verdadeiro)? Por quê? - No Exemplo Guiado (Motor Tarifário), qual fórmula a função
calcular_frete_baseutiliza para calcular o custo, com base na distância e no peso? - No Exemplo Guiado, qual é a função responsável por verificar se o peso da carga não ultrapassa o limite máximo, e qual valor ela retorna em cada um dos dois casos possíveis?
- Na Prática Obrigatória 1 (Validação de Placa Mercosul), qual condição a função
validar_tamanho_placaverifica para retornarverdadeiro? - Na Prática Obrigatória 2 (Calculadora de Performance Ponderada), quais são os pesos atribuídos a Pontualidade, Segurança e Economia Diesel no cálculo do Score?
- Segundo o Checkpoint de Lógica & Engenharia de Software, o que caracteriza uma Função Pura (Pure Function), e em quais arquiteturas modernas esse conceito é citado como aplicado?
- No Exemplo Guiado, o que o programa exibe se o peso digitado exceder 30.000 kg (30 toneladas)?
- Explique com suas palavras, usando a fórmula apresentada no Cenário Prático, por que centralizar o cálculo de frete em uma função evita divergências financeiras quando há reajuste de tarifas.