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