🚀 Capítulo 03: Programação Funcional (Tema: Thanos)
NOTE
Este capítulo utiliza a temática de Thanos para explicar a Programação Funcional. O estalar de dedos precisa ser uma função perfeita: sem efeitos colaterais inesperados e com o mesmo resultado sempre!
1. 🎯 Objetivo da Aula
Compreender os conceitos principais da Programação Funcional (PF): Funções Puras, Imutabilidade e ausência de Efeitos Colaterais (Side Effects).
2. 🏢 O Cenário Prático (Seu Desafio)
Thanos quer trazer o equilíbrio para o universo. Para isso, ele precisa de uma fórmula (função) perfeita.
- Imutabilidade: O universo atual não deve ser modificado diretamente (“riscado”). Ele cria uma nova realidade com metade da população. Os dados antigos não mudam, novos dados são gerados.
- Funções Puras: Se ele estalar os dedos em um planeta com 10 bilhões de pessoas, sobram 5 bilhões. Se ele fizer isso de novo em outro planeta com 10 bilhões, o resultado deve ser exatamente o mesmo. A função não depende de humor ou de fatores externos.
- Sem Efeitos Colaterais: O estalar de dedos remove metade da população, mas não deve, por acidente, mudar a cor das estrelas ou a gravidade dos planetas.
Seu desafio é entender como criar funções tão confiáveis quanto as Joias do Infinito!
3. 🧠 Fundamentos: A Teoria Traduzida
A Programação Funcional trata a computação como a avaliação de funções matemáticas e evita dados mutáveis.
📜 1. Funções Puras
Uma função é considerada pura se:
- Para a mesma entrada, ela sempre retorna a mesma saída.
- Ela não causa Efeitos Colaterais (não altera nenhuma variável fora dela, não altera o banco de dados, não imprime na tela).
🔒 2. Imutabilidade
Na programação funcional, você não altera o valor de uma variável. Se você precisa mudar uma lista, você cria uma nova lista com os valores alterados. O dado original é sagrado.
4. 📖 Exemplo Guiado: Função Impura vs Pura
Impura (Depende de fora e altera o mundo exterior):
let populacao = 100;
function estalarDedosImpuro() {
populacao = populacao / 2; // Altera uma variável global (Efeito Colateral)
}Pura (Não altera nada de fora, apenas calcula):
function estalarDedosPuro(populacaoAtual) {
return populacaoAtual / 2; // Apenas retorna o cálculo
}
const novaPopulacao = estalarDedosPuro(100); // Retorna 505. 🛠️ Prática Obrigatória 1: Identificando Funções Puras
Diga se as funções abaixo são Puras ou Impuras e explique o porquê:
- Uma função que lê a hora do sistema para dar bom dia ou boa noite.
- Uma função que recebe o raio de um círculo e calcula a sua área ().
- Uma função que adiciona um item em um array global.
6. 🛠️ Prática Obrigatória 2: O Custo da Imutabilidade
Se para cada alteração em uma lista de 1 milhão de usuários nós precisarmos criar uma cópia da lista inteira com a alteração, o computador não vai ficar sem memória RAM muito rápido? Como as linguagens modernas resolvem isso? (Dica: Pesquise sobre Estruturas de Dados Persistentes).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 03 Paradigmas) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│ ├── capitulo_03_funcional.md
│ └── codigos/
│ └── cap03/
│ └── Thanos_snap.js9. 💡 Checkpoint de Lógica
Se as funções puras não podem alterar nada fora delas (nem imprimir na tela), como um programa puramente funcional consegue interagir com o usuário? (Dica: As linguagens funcionais puras usam conceitos avançados como “Monads” para lidar com isso).
10. 🔥 Desafio de Fixação
Pesquise o que são as funções de alta ordem .map(), .filter() e .reduce() no JavaScript e como elas ajudam a programar de forma funcional.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Impura (O resultado muda dependendo da hora do dia, mesmo com a mesma entrada).
- Pura (Para o mesmo raio, a área será sempre a mesma e não altera nada fora).
- Impura (Causa efeito colateral ao alterar um dado fora do escopo da função).