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:

  1. Compreender o conceito de Modularização de Software e o Princípio DRY (Don’t Repeat Yourself).
  2. Criar novos blocos customizados na categoria 🟪 Meus Blocos.
  3. Adicionar Parâmetros de Entrada (Números e Textos) aos seus blocos customizados.
  4. Compreender a opção de performance “Executar sem atualizar a tela”.
  5. 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:


🏢 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:#fff

2. 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:

  1. Abra a categoria 🟪 Meus Blocos e clique em Criar um Bloco.
  2. Digite o nome: Calcular_Frete.
  3. Clique em Adicionar uma entrada (número ou texto) e nomeie como peso.
  4. Clique novamente em Adicionar uma entrada e nomeie como distancia.
  5. Clique em OK. Um grande bloco de chapéu roxo surgirá: defina [Calcular_Frete (peso) (distancia)].
  6. Conecte a lógica na definição e depois chame o bloco na bandeira verde:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 1. DEFINIÇÃO DA REGRA (A Receita)
defina [Calcular_Frete (peso) (distancia)]
mude [Valor_Calculado v] para ((((peso) * (1.8)) + ((distancia) * (3.2))) + (50))
toque o som [Coin v]
diga (junte [Fatura FastLog: R$ ] (Valor_Calculado)) por (3) segundos

// 2. USO PRÁTICO (Chamadas com diferentes cargas)
quando clicar em 🏁
diga [Iniciando faturamento de 2 carretas do pátio...] por (2) segundos

// Primeira Carreta: Carga Leve de Curta Distância
Calcular_Frete (1200) (80)

// Segunda Carreta: Carga Pesada Interestadual
Calcular_Frete (15000) (650)

🛠️ Prática Obrigatória 1: Bloco de Manobra Padronizada

O Desafio:

Crie um bloco customizado chamado [Efetuar_Manobra (tempo) (direcao)]:

  1. 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].
  2. 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)]:

  1. Se (peso_real) > (limite_max):
    • Mude a cor para vermelho e avise: [SOBREPESO CRÍTICO: Descarga proibida!].
  2. Senão:
    • Mude a cor para verde e avise: [CARGA REGULAR: Pátio liberado.].
  3. Teste chamando:
    • Validar_Carga (14000) (15000) ➔ Deve aprovar.
    • Validar_Carga (18500) (15000) ➔ Deve reprovar.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo do projeto com o nome: Atividade_17_SeuNome_SeuSobrenome.sb3.
  2. Verifique se o código possui a definição roxa do bloco e as chamadas nos eventos.
  3. No Microsoft Teams, envie na tarefa “Scratch Cap 17 - Meus Blocos e Funções”.
  4. 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Ator: Empilhadeira]
defina [Efetuar_Manobra (tempo) (direcao)]
aponte para a direção (direcao)
deslize por (tempo) segs até x: (x atual + 50) y: (y atual)
toque o som [Car Brake v] até o fim

quando clicar em 🏁
Efetuar_Manobra (2) (90)
espere (1) segundos
Efetuar_Manobra (1.5) (-90)

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Ator: Balanca]
defina [Validar_Carga (peso_real) (limite_max)]
se <(peso_real) > (limite_max)> então
    mude o efeito [cor v] para (0) // Vermelho
    toque o som [Buzz v]
    diga (junte [SOBREPESO CRÍTICO: ] (junte (peso_real) [ kg excede limite!])) por (3) segundos
senão
    mude o efeito [cor v] para (50) // Verde
    toque o som [Bell v]
    diga [CARGA REGULAR: Pátio liberado.] por (3) segundos
fim

quando clicar em 🏁
Validar_Carga (14000) (15000)
espere (1) segundos
Validar_Carga (18500) (15000)

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Ator: Trator_Pintor]
defina [Desenhar_Vaga (tamanho)]
baixe a caneta
repita (2) vezes
    mova (tamanho) passos
    gire para a direita (90) graus
    mova ((tamanho) / (2)) passos
    gire para a direita (90) graus
fim
levante a caneta

quando clicar em 🏁
apague tudo
fixe a cor da caneta para [#ffff00] // Amarelo Faixa
vá para x: (-100) y: (0)
Desenhar_Vaga (80)

📥 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.

  1. 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?
  2. Quais são as duas etapas distintas envolvidas na criação e uso de um bloco customizado, segundo os Fundamentos?
  3. O que são “Parâmetros de Entrada” em um bloco customizado, segundo os Fundamentos?
  4. O que acontece quando a opção “Executar sem atualizar a tela” está marcada ao criar um bloco customizado?
  5. No Exemplo Guiado, qual é o nome do bloco customizado criado, e quais são os nomes dos dois parâmetros adicionados a ele?
  6. 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?
  7. Na Prática Obrigatória 1, qual é o nome do bloco customizado criado, e quais são seus dois parâmetros?
  8. Na Prática Obrigatória 2, qual condição faz o bloco Validar_Carga exibir a mensagem de “SOBREPESO CRÍTICO: Descarga proibida!”?
  9. Segundo o Checkpoint de Lógica & Engenharia de Software, a que conceito de programação profissional os blocos customizados reutilizáveis são comparados?
  10. No Exemplo Guiado, qual som é tocado dentro da definição do bloco Calcular_Frete ao exibir o resultado da fatura?