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

**<i class="fas fa-lightbulb"></i> Exemplo**:

```
FUNÇÃO AcenderLuz():
    pressione o interruptor
```

### **2. Função com Retorno**

- Executa ações E devolve um resultado
- Como uma calculadora

**<i class="fas fa-calculator"></i> 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

**<i class="fas fa-comment"></i> Exemplo**:

```
FUNÇÃO Cumprimentar(nome):
    diga "Olá, " + nome + "!"
```

## **Funções no Cotidiano**

### **Em Casa**

- **<i class="fas fa-coffee"></i> FazerCafé()**: Toda manhã, mesmos passos
- **<i class="fas fa-car"></i> IrTrabalho()**: Mesmo percurso sempre
- **<i class="fas fa-bed"></i> ArrumarCama()**: Mesma sequência

### **Na Escola**

- **<i class="fas fa-bell"></i> TocarSinal()**: Música sempre igual
- **<i class="fas fa-list-alt"></i> FazerChamada(turma)**: Processo padrão
- **<i class="fas fa-chalkboard"></i> ExplicarMatéria(assunto)**: Estrutura similar

### **Na Tecnologia**

- **<i class="fas fa-save"></i> Salvar()**: Sempre mesmo processo
- **<i class="fas fa-print"></i> Imprimir(documento)**: Passos padrão
- **<i class="fas fa-envelope"></i> EnviarEmail(destinatário, mensagem)**: Protocolo fixo

## **Na Programação Visual**

### **Blocos de Função**

No Decoda, você verá:

- **<i class="fas fa-plus"></i> "Criar função"**: Para definir nova função
- **<i class="fas fa-tag"></i> Nome da função**: Como identificar
- **<i class="fas fa-cogs"></i> Parâmetros**: "Ingredientes" que recebe
- **<i class="fas fa-play"></i> 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. **<i class="fas fa-repeat"></i> Comece com repetição**: Mostre código repetitivo
2. **<i class="fas fa-magic"></i> Apresente como solução**: "Vamos organizar isso!"
3. **<i class="fas fa-hands"></i> Use analogias físicas**: Receitas, instruções
4. **<i class="fas fa-step-forward"></i> 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:

- **<i class="fas fa-check"></i>** Identificar quando usar funções
- **<i class="fas fa-check"></i>** Criar funções simples com nomes descritivos
- **<i class="fas fa-check"></i>** Usar parâmetros para tornar funções flexíveis
- **<i class="fas fa-check"></i>** Organizar código usando funções
- **<i class="fas fa-check"></i>** 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

---

**<i class="fas fa-arrow-right"></i> Próximo**: Explore [**Procedural**](./procedural) para aprender como organizar algoritmos passo a passo!
