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

  1. Para a mesma entrada, ela sempre retorna a mesma saída.
  2. 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 50

5. 🛠️ Prática Obrigatória 1: Identificando Funções Puras

Diga se as funções abaixo são Puras ou Impuras e explique o porquê:

  1. Uma função que lê a hora do sistema para dar bom dia ou boa noite.
  2. Uma função que recebe o raio de um círculo e calcula a sua área ().
  3. 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 03 Paradigmas) e clique em Commit to main.
  2. 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.js

9. 💡 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:

  1. Impura (O resultado muda dependendo da hora do dia, mesmo com a mesma entrada).
  2. Pura (Para o mesmo raio, a área será sempre a mesma e não altera nada fora).
  3. Impura (Causa efeito colateral ao alterar um dado fora do escopo da função).

Capitulo Anterior | Proximo Capitulo