Capítulo 17: Criando 'Meus Blocos' (Funções, Procedimentos e DRY)
🎯 Objetivo da Aula
Conforme nossos projetos de simulação crescem, começamos a notar um problema clássico da programação: pilhas enormes de blocos idênticos duplicadas em vários pontos do projeto. Se precisarmos alterar a regra de cálculo, teremos que modificar todos esses locais manualmente. No Scratch, resolvemos isso através da categoria 🟪 Meus Blocos (o equivalente visual às Funções e Procedimentos de linguagens profissionais).
Ao final desta aula, você será capaz de:
- Compreender o conceito de Modularização de Software e o Princípio DRY (Don’t Repeat Yourself).
- Criar novos blocos customizados na categoria 🟪 Meus Blocos.
- Adicionar Parâmetros de Entrada (Números e Textos) aos seus blocos customizados.
- Compreender a opção de performance “Executar sem atualizar a tela”.
- Construir o Módulo Reutilizável de Cálculo de Fretes e Emissão de Recibos da FastLog.
📥 Material de Apoio e Roteiro de Blocos:
- 📄 Roteiro Estruturado (.txt): Baixar Capitulo_17.txt (guia textual com a sequência de blocos)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_17.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O sistema de faturamento da FastLog precisa calcular a taxa de expedição de diversas carretas ao longo do dia. A fórmula de cobrança é sempre a mesma:
$$\text{Custo Total} = (\text{Peso da Carga} \times 1.80) + (\text{Distância em KM} \times 3.20) + \text{Taxa Fixa de R$ 50,00}$$
Em vez de montar essa pilha de operadores matemáticos 10 vezes no projeto, o diretor de TI solicitou que você encapsule essa lógica dentro de um bloco customizado reutilizável chamado:
[Calcular_Frete (Peso) (Distancia)].
Missão: Criar o bloco customizado, programar sua definição matemática e chamá-lo com diferentes parâmetros de teste.
🧠 Fundamentos: Como Funcionam os “Meus Blocos”?
Blocos customizados existem para resolver o problema da duplicação de código: em vez de repetir a mesma pilha de blocos em vários pontos do projeto, encapsulamos essa lógica uma única vez e a reutilizamos por chamada. Esse é o Princípio DRY (Don’t Repeat Yourself — “não se repita”): toda regra ou cálculo deve existir em um único lugar no projeto.
1. Definição vs Chamada
A criação de um bloco customizado envolve duas etapas distintas:
- A Definição (
defina [Meu_Bloco]): É a “receita do bolo”. Fica guardada em um canto da tela explicando ao computador o que fazer quando o bloco for invocado. - A Chamada (
[Meu_Bloco]): É o bloco que você encaixa no seu script principal para executar aquela receita.
graph TD
subgraph Definicao_Da_Funcao ["1. Definição da Função (🟪 Meus Blocos)"]
D1["defina [Calcular_Frete (peso) (distancia)]"] --> D2["Aplica Fórmula Matemática"]
D2 --> D3["Exibe Balão de Fatura"]
end
subgraph Script_Principal ["2. Fluxo Principal da Simulação"]
S1["quando clicar em 🏁"] --> S2["Calcular_Frete (1500) (250)"]
S2 -.-> D1
S2 --> S3["Calcular_Frete (4000) (800)"]
S3 -.-> D1
S3 --> S4["Fim do Faturamento"]
end
style D1 fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style S1 fill:#f39c12,stroke:#fff,color:#fff
style S2 fill:#9b59b6,stroke:#fff,color:#fff
style S3 fill:#9b59b6,stroke:#fff,color:#fff2. O que são Parâmetros de Entrada?
Parâmetros são valores dinâmicos que você passa para dentro do bloco. No nosso exemplo, (peso) e (distancia) são parâmetros. Quando chamamos Calcular_Frete (1000) (50), o bloco usa peso = 1000 e distancia = 50. Se chamarmos Calcular_Frete (2000) (300), ele recalcula instantaneamente com os novos números!
3. “Executar sem atualizar a tela” (Run Without Screen Refresh)
Ao criar um bloco, existe uma caixinha chamada “Executar sem atualizar a tela”.
- Desmarcado: O Scratch desenha o palco a cada passo (útil para ver o caminhão andando).
- Marcado: O Scratch executa todos os blocos em 0 milissegundos (modo turbo, excelente para cálculos matemáticos pesados ou desenhos instantâneos).
📖 Exemplo Guiado: Função Customizada de Cálculo de Frete
Passo a Passo no Scratch 3.0:
- Abra a categoria 🟪 Meus Blocos e clique em Criar um Bloco.
- Digite o nome:
Calcular_Frete. - Clique em Adicionar uma entrada (número ou texto) e nomeie como
peso. - Clique novamente em Adicionar uma entrada e nomeie como
distancia. - Clique em OK. Um grande bloco de chapéu roxo surgirá:
defina [Calcular_Frete (peso) (distancia)]. - Conecte a lógica na definição e depois chame o bloco na bandeira verde:
🛠️ Prática Obrigatória 1: Bloco de Manobra Padronizada
O Desafio:
Crie um bloco customizado chamado [Efetuar_Manobra (tempo) (direcao)]:
- Na definição:
- Aponte para a
(direcao)informada no parâmetro. - Deslize por
(tempo)segundos até as coordenadas de destino. - Toque o som de freio [Car Brake].
- Aponte para a
- Chame esse bloco 2 vezes na bandeira verde para manobrar a empilhadeira com parâmetros diferentes:
Efetuar_Manobra (2) (90)Efetuar_Manobra (1.5) (-90)
🛠️ Prática Obrigatória 2: Bloco de Validação de Peso com Tolerância
Crie um bloco customizado com parâmetros chamado [Validar_Carga (peso_real) (limite_max)]:
- Se
(peso_real) > (limite_max):- Mude a cor para vermelho e avise:
[SOBREPESO CRÍTICO: Descarga proibida!].
- Mude a cor para vermelho e avise:
- Senão:
- Mude a cor para verde e avise:
[CARGA REGULAR: Pátio liberado.].
- Mude a cor para verde e avise:
- Teste chamando:
Validar_Carga (14000) (15000)➔ Deve aprovar.Validar_Carga (18500) (15000)➔ Deve reprovar.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo do projeto com o nome:
Atividade_17_SeuNome_SeuSobrenome.sb3. - Verifique se o código possui a definição roxa do bloco e as chamadas nos eventos.
- No Microsoft Teams, envie na tarefa “Scratch Cap 17 - Meus Blocos e Funções”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Modularidade com Blocos Reutilizáveis (“Meus Blocos”) e Parâmetros, seguindo o Princípio DRY apresentado nos Fundamentos. Repare que o bloco Calcular_Frete não é uma “função pura”: ele altera a variável global Valor_Calculado, toca um som e exibe uma fala — ou seja, produz efeitos colaterais além de apenas calcular um valor. Mesmo assim, ele resolve o problema real de duplicação de código: em projetos industriais modernos em TypeScript, C# e Python, funções e métodos reutilizáveis como essa evitam duplicação de bugs e permitem que equipes inteiras trabalhem em componentes independentes.
🔥 Desafio de Fixação: Bloco Desenhar Caixa com Caneta
Ative a extensão Caneta (Pen) no canto inferior esquerdo do Scratch. Crie um bloco customizado [Desenhar_Vaga (tamanho)] que use blocos de caneta para desenhar um retângulo de vaga de estacionamento no chão do pátio com o tamanho passado como parâmetro!
🔑 Gabarito de Código (Blocos do Scratch)
Prática 1:
Prática 2:
Desafio:
📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_17.txt ou o pacote compactado (.zip) com os scripts e desafios da aula.
📝 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 princípio de engenharia de software (sigla em inglês, que significa “não se repita”) motiva a criação de blocos customizados, segundo o Objetivo da Aula?
- Quais são as duas etapas distintas envolvidas na criação e uso de um bloco customizado, segundo os Fundamentos?
- O que são “Parâmetros de Entrada” em um bloco customizado, segundo os Fundamentos?
- O que acontece quando a opção “Executar sem atualizar a tela” está marcada ao criar um bloco customizado?
- No Exemplo Guiado, qual é o nome do bloco customizado criado, e quais são os nomes dos dois parâmetros adicionados a ele?
- Segundo o Cenário Prático, qual é a fórmula matemática completa (com os valores de multiplicação e a taxa fixa) usada para calcular o Custo Total do frete?
- Na Prática Obrigatória 1, qual é o nome do bloco customizado criado, e quais são seus dois parâmetros?
- Na Prática Obrigatória 2, qual condição faz o bloco
Validar_Cargaexibir a mensagem de “SOBREPESO CRÍTICO: Descarga proibida!”? - Segundo o Checkpoint de Lógica & Engenharia de Software, a que conceito de programação profissional os blocos customizados reutilizáveis são comparados?
- No Exemplo Guiado, qual som é tocado dentro da definição do bloco
Calcular_Freteao exibir o resultado da fatura?