Capítulo 17: Funções I: Procedimentos sem Retorno (Modularização I e Escopo)
🎯 Objetivo da Aula
Programas corporativos reais não possuem 20 ou 30 linhas: eles contêm milhares de linhas de código. Escrever tudo amontoado dentro de uma única funcao inicio() torna o software impossível de ler, testar e manter. A solução consagrada da Engenharia de Software é a Modularização.
Nesta aula, você aprenderá a:
- Compreender o princípio DRY (Don’t Repeat Yourself) e a decomposição modular.
- Dominar a sintaxe de funções sem retorno:
funcao vazio Nome(parametros) { ... }no Portugol Studio. - Diferenciar Variáveis Globais (declaradas fora das funções) de Variáveis Locais (declaradas dentro da função).
- Praticar a Passagem de Parâmetros por Valor.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_17.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_17.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O sistema de emissão de faturas da FastLog possui diversas telas diferentes (Cadastro de Motoristas, Consulta de Frota, Emissão de CT-e, etc.). Em todas as telas, é obrigatório imprimir um Cabeçalho Visual Padronizado com o logotipo da empresa e desenhar molduras de mensagens. Toda vez que o slogan da empresa muda, o programador precisa alterar 10 partes diferentes do código manual.
Missão: Você deve criar a sub-rotina modular funcao vazio imprimir_cabecalho(cadeia titulo) e funcao vazio exibir_alerta(cadeia msg), centralizando a formatação visual e eliminando a duplicidade de código no sistema.
🧠 Fundamentos: A Teoria da Modularização
1. O que é uma Função sem Retorno (funcao vazio)?
Uma Função vazio (Procedure / Void Function) é um bloco independente de instruções que realiza uma tarefa específica quando é invocada pelo programa principal, mas não devolve nenhum valor numérico ou textual diretamente:
graph TD
A[funcao inicio - Principal] -->|1. Invoca: imprimir_cabecalho| B["funcao vazio imprimir_cabecalho()"]
B -->|2. Desenha moldura e título| B
B -->|3. Retorna controle ao chamador| A
A -->|4. Continua execução normal| C[Processar Pedido]
style A fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style B fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style C fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. Onde Declarar Funções no Portugol Studio?
As funções devem ser escritas dentro do bloco programa { }, no mesmo nível hierárquico da função inicio():
3. Escopo de Variáveis: Global vs Local
| Tipo de Escopo | Onde é declarada? | Onde pode ser lida/alterada? | Tempo de Vida na RAM |
|---|---|---|---|
| Variável Global | No topo do bloco programa, fora de qualquer função. | No inicio() e dentro de qualquer outra função. | Enquanto o programa estiver rodando. |
| Variável Local | Dentro das chaves { } de uma função específica. | Apenas e exclusivamente dentro daquela função. | Criada ao chamar e destruída ao sair. |
📖 Exemplo Guiado: Sistema Modular com Notificações
Código do Programa:
✅ Exemplo de Execução no Console (Shift + F6):
🛠️ Prática Obrigatória 1: Procedimento de Menu Padronizado
Passo 1: O Desafio
Crie um programa menu_modular.por que contenha a função:
funcao vazio exibir_menu()
Essa função deve desenhar na tela o menu com as opções:
[1] Cadastrar Motorista[2] Consultar Frota[3] Relatório de Viagens[0] Sair do Sistema
No programa principal inicio(), chame essa função dentro de um laço faca-enquanto (opcao != 0).
🛠️ Prática Obrigatória 2: Procedimento Calculador de ICMS Parametrizado
Crie uma função sem retorno chamada funcao vazio calcular_icms(real valorFrete, real aliquota) que receba o valor bruto do frete e a alíquota (ex: 0.12 para 12%), calculando e imprimindo o valor exato do imposto no console.
Chame a função 3 vezes no programa principal para fretes diferentes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_SeuNome_SeuSobrenome.por. - Certifique-se de que todas as funções estão dentro de
programa { }. - No Microsoft Teams, envie na tarefa “Portugol Cap 17 - Funções e Modularização”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o princípio DRY (Don’t Repeat Yourself). Em grandes empresas de tecnologia, a reutilização de código através de bibliotecas de funções economiza milhões de reais em horas de desenvolvimento e reduz drasticamente a ocorrência de bugs.
🔥 Desafio de Fixação: Moldura com Caractere Customizável
Crie uma função funcao vazio moldura_customizada(cadeia msg, caracter simbolo) que receba a mensagem e o símbolo de borda (ex: '#' ou '*'), desenhando uma caixa personalizada ao redor do texto.
🔑 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.
- O que é uma Função
vazio(funcao vazio), segundo a definição dos Fundamentos, e o que a diferencia de uma função que devolve valor? - Qual é a sintaxe geral de declaração de uma função sem retorno no Portugol Studio?
- Onde as funções devem ser declaradas em relação ao bloco
programa { }e à funçãoinicio(), segundo o capítulo? - Segundo a tabela de Escopo de Variáveis, qual é a diferença entre uma Variável Global e uma Variável Local quanto ao local de declaração e à visibilidade dentro do programa?
- No exemplo de código dos Fundamentos, onde a variável
empresaGlobalé declarada, e por que ela pode ser usada dentro da funçãoimprimir_cabecalho()? - No Exemplo Guiado (Sistema Modular com Notificações), qual é o propósito do parâmetro
ehUrgenteda funçãonotificar_status, e o que ele determina no comportamento da função? - Na Prática Obrigatória 1 (Procedimento de Menu Padronizado), quais são as 4 opções que devem aparecer no menu exibido pela função
exibir_menu()? - Na Prática Obrigatória 2 (Calculador de ICMS Parametrizado), quais dois parâmetros a função
calcular_icmsdeve receber, e quantas vezes ela deve ser chamada no programa principal? - Segundo o Checkpoint de Lógica & Engenharia de Software, o que significa o princípio DRY (Don’t Repeat Yourself) e qual é o benefício citado da reutilização de código em grandes empresas de tecnologia?
- Qual é o problema prático enfrentado no sistema de faturas da FastLog, descrito no Cenário Prático, que motivou a criação de funções centralizadas como
imprimir_cabecalhoeexibir_alerta?