---
sidebar_position: 3
title: "Funções"
---
# Funções - Organizando o Código
**Funções** são como receitas especiais que você cria uma vez e pode usar sempre que precisar. É o computador sendo organizado: em vez de repetir instruções, ele guarda "receitas" prontas!
## **O que são Funções?**
Funções são **blocos de código reutilizáveis** que executam uma tarefa específica. Você dá um nome para um conjunto de ações e pode "chamar" essa função sempre que precisar.
### **Analogia: Receita de Bolo**
Imagine que você ama fazer bolo de chocolate:
- **SEM FUNÇÃO**: Toda vez escreve a receita completa (20+ passos)
- **COM FUNÇÃO**: Cria receita "FazerBoloChocolate()" e só chama quando quiser
Quando alguém perguntar como fazer, você só diz: "Use a receita de bolo de chocolate!"
## **Como Funcionam?**
```mermaid
flowchart TD
A[Definir função] --> B[Nome + parâmetros]
B --> C[Escrever passos internos]
C --> D[Chamar função no programa]
D --> E{Retorna valor?}
E -->|Sim| F[Usar retorno em variável/decisão]
E -->|Não| G[Continuar fluxo]
F --> H[Fim]
G --> H
```
### **Estrutura Básica**
```
FUNÇÃO MinhaReceita():
passo 1
passo 2
passo 3
```
Para usar:
```
MinhaReceita() // Executa todos os passos!
```
### **Com Parâmetros (Ingredientes)**
```
FUNÇÃO FazerSuco(fruta):
corte a fruta
adicione água
misture
```
Para usar:
```
FazerSuco(laranja) // Faz suco de laranja
FazerSuco(limão) // Faz suco de limão
```
## **Atividades Desplugadas**
### **1. Truque de Mágica**
**Material**: Baralho de cartas
**Como fazer**:
1. Ensine um truque simples (função)
2. Dê nome: "TruqueDoDesaparecimento()"
3. Sempre que alguém pedir, execute o "truque"
4. **Variação**: TruqueDoDesaparecimento(carta_vermelha)
### **2. Coreografia Pessoal**
**Material**: Música
**Como fazer**:
1. Cada estudante cria sua "dança especial" (função)
2. Dá nome: "DançaDoPedro()", "DançaDaAna()"
3. Quando chamarem o nome, executam a dança
4. **Com parâmetro**: DançaDoPedro(rápida) ou DançaDoPedro(lenta)
### **3. Aviões de Papel**
**Material**: Papel
**Como fazer**:
1. Ensine a dobrar aviãozinho (função "FazerAvião()")
2. Todos decoram os passos
3. Quando disser "FazerAvião()", todos fazem
4. **Variação**: FazerAvião(papel_colorido)
## **Tipos de Funções**
### **1. Função Simples (Sem Retorno)**
- Executa ações
- Não "devolve" nada
- Como ligar a TV
** Exemplo**:
```
FUNÇÃO AcenderLuz():
pressione o interruptor
```
### **2. Função com Retorno**
- Executa ações E devolve um resultado
- Como uma calculadora
** Exemplo**:
```
FUNÇÃO Somar(a, b):
resultado = a + b
retorne resultado
```
### **3. Função com Parâmetros**
- Recebe "ingredientes" para trabalhar
- Mais flexível e reutilizável
** Exemplo**:
```
FUNÇÃO Cumprimentar(nome):
diga "Olá, " + nome + "!"
```
## **Funções no Cotidiano**
### **Em Casa**
- ** FazerCafé()**: Toda manhã, mesmos passos
- ** IrTrabalho()**: Mesmo percurso sempre
- ** ArrumarCama()**: Mesma sequência
### **Na Escola**
- ** TocarSinal()**: Música sempre igual
- ** FazerChamada(turma)**: Processo padrão
- ** ExplicarMatéria(assunto)**: Estrutura similar
### **Na Tecnologia**
- ** Salvar()**: Sempre mesmo processo
- ** Imprimir(documento)**: Passos padrão
- ** EnviarEmail(destinatário, mensagem)**: Protocolo fixo
## **Na Programação Visual**
### **Blocos de Função**
No Decoda, você verá:
- ** "Criar função"**: Para definir nova função
- ** Nome da função**: Como identificar
- ** Parâmetros**: "Ingredientes" que recebe
- ** Chamar função**: Bloco para usar
### **Exemplo no Jogo Tartaruga**
```
FUNÇÃO DesenharQuadrado(tamanho):
repita 4 vezes:
ande tamanho passos
vire 90 graus
// Para usar:
DesenharQuadrado(50) // Quadrado pequeno
DesenharQuadrado(100) // Quadrado grande
```
## **Vantagens das Funções**
### **1. Reutilização**
- Escreve uma vez, usa muitas vezes
- Economiza tempo e esforço
### **2. Organização**
- Código mais limpo e claro
- Cada função faz uma coisa específica
### **3. Facilita Manutenção**
- Erro? Conserta só na função
- Melhoria? Atualiza só um lugar
### **4. Trabalho em Equipe**
- Cada pessoa pode criar suas funções
- Compartilha com o grupo
### **5. Menos Erros**
- Testa função uma vez
- Confia sempre que usar
## **Criando Boas Funções**
### **Nome Descritivo**
- **Bom**: `CalcularIdade()`
- **Ruim**: `Fazer()`
### **Uma Responsabilidade**
- **Bom**: `EnviarEmail()` só envia email
- **Ruim**: `EnviarEmailEFazerCafé()` faz duas coisas
### **Tamanho Adequado**
- **Bom**: 5-15 linhas geralmente
- **Ruim**: 100 linhas (muito complexa)
## **Atividades Práticas com Decoda**
### **1. Biblioteca de Formas**
Crie funções para:
- `DesenharTriângulo(tamanho)`
- `DesenharCirculo(raio)`
- `DesenharEstrela(pontas)`
### **2. Efeitos Sonoros**
Crie funções para:
- `SomDeVitória()`: Música alegre
- `SomDerrota()`: Som triste
- `SomAção(tipo)`: Diferentes sons
### **3. Comportamentos do Personagem**
Crie funções para:
- `Pular(altura)`: Pulo customizável
- `Correr(velocidade)`: Corrida variável
- `Atacar(direção)`: Ataque direcional
## **Dicas para Educadores**
### **Como Ensinar**
1. ** Comece com repetição**: Mostre código repetitivo
2. ** Apresente como solução**: "Vamos organizar isso!"
3. ** Use analogias físicas**: Receitas, instruções
4. ** Construa gradualmente**: Simples → Parâmetros → Retorno
### **Erros Comuns**
- **Função muito genérica**: `FazerTudo()`
- **Nome confuso**: `Coisa1()`, `Função2()`
- **Muitos parâmetros**: `Função(a,b,c,d,e,f,g)`
- **Função muito complexa**: Faz muitas coisas diferentes
### **Sinais de Compreensão**
- Identifica código repetitivo
- Cria nomes descritivos para funções
- Usa parâmetros apropriadamente
- Explica por que funções são úteis
## **Pensamento Computacional**
### **Decomposição**
- Quebrar problemas em funções menores
- Cada função resolve uma parte
### **Abstração**
- Esconder detalhes complexos
- Usuário só precisa saber o nome da função
### **Reconhecimento de Padrões**
- Identificar ações que se repetem
- Criar funções para padrões comuns
### **Algoritmos**
- Organizar soluções em blocos reutilizáveis
- Construir sistemas complexos com peças simples
## **Objetivos de Aprendizagem**
Ao final desta seção, estudantes devem conseguir:
- **** Identificar quando usar funções
- **** Criar funções simples com nomes descritivos
- **** Usar parâmetros para tornar funções flexíveis
- **** Organizar código usando funções
- **** Explicar vantagens das funções
## **Atividades de Fixação**
### **1. Identifique a Função**
Que funções você criaria para:
- Fazer um sanduíche
- Arrumar o quarto
- Escovar os dentes
### **2. Nomeação**
Dê nomes melhores para:
- `Função1()` que desenha casa
- `Coisa()` que toca música
- `Fazer()` que calcula nota
### **3. Parâmetros**
Que parâmetros essas funções precisariam?
- `DesenharRetângulo(?)`
- `TocarMúsica(?)`
- `MandarMensagem(?)`
## **Referências e Recursos**
### **Sites Educativos**
- [Code.org - Functions](https://code.org/curriculum/course3/14/Activity14-Functions.pdf) - Atividades com funções
- [CS Unplugged - Functions](https://csunplugged.org/en/topics/programming-languages/unit-plan/modular-programming/) - Programação modular
- [Scratch - Custom Blocks](https://scratch.mit.edu/help/studio/tips/custom-blocks/) - Blocos personalizados
### **Vídeos Explicativos**
- [Functions Explained](https://www.youtube.com/watch?v=N_Ls37qeQ4c) - Conceitos básicos
- [Why Use Functions?](https://www.youtube.com/watch?v=j9Ll8QWwwTE) - Vantagens das funções
- [Function Parameters](https://www.youtube.com/watch?v=HnC2JhdsJYw) - Parâmetros explicados
### **Jogos e Atividades**
- [CodeCombat](https://codecombat.com/) - RPG que ensina funções
- [CheckiO](https://checkio.org/) - Desafios de programação
- [CodinGame](https://www.codingame.com/) - Jogos com funções
### **Literatura Acadêmica**
- Martin, R. (2008). _Clean Code: A Handbook of Agile Software Craftsmanship_
- McConnell, S. (2004). _Code Complete: A Practical Handbook_
- Fowler, M. (2018). _Refactoring: Improving the Design of Existing Code_
### **Ferramentas Práticas**
- [Repl.it](https://replit.com/) - Editor online para praticar funções
- [Trinket](https://trinket.io/) - Python no navegador
- [JSFiddle](https://jsfiddle.net/) - JavaScript para experimentar
### **Cursos Complementares**
- [Khan Academy - Intro to Programming](https://www.khanacademy.org/computing/intro-to-programming) - Funções básicas
- [MIT OpenCourseWare](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/) - Programação avançada
- [Coursera - Programming for Everybody](https://www.coursera.org/learn/python) - Python com funções
---
** Próximo**: Explore [**Procedural**](./procedural) para aprender como organizar algoritmos passo a passo!