Voltar aos Cursos
AI019 Professional

Programando com Elixir

Um guia abrangente sobre programação funcional e concorrente usando Elixir. Aborda a transição do pensamento orientado a objetos para o pensamento funcional, correspondência de padrões, imutabilidade, o modelo ator para concorrência e a construção de sistemas distribuídos robustos com OTP.

4.8
30.0h
981 estudantes
0 curtidas
Inteligência Artificial
Começar a Aprender

Visão Geral do Curso

📚 Resumo do Conteúdo

Um guia abrangente sobre programação funcional e concorrente usando Elixir. Cobrirá a transição do pensamento orientado a objetos para o funcional, correspondência de padrões, imutabilidade, o modelo de ator para concorrência e a construção de sistemas distribuídos robustos com OTP.

Domine a arte de construir sistemas concorrentes resilientes por meio da beleza da programação funcional.

Autor: Dave Thomas

Agradecimentos: José Valim, Corey Haines, Bruce Tate, Jessica Kerr, Anthony Eden, Chad Fowler, Kim Shrier, Candace Cunningham e Potomac Indexing.

🎯 Objetivos de Aprendizagem

  1. Contraste o modelo de transformação de dados do Elixir com a programação convencional baseada em estado.
  2. Configure o shell interativo do Elixir (IEx) e execute códigos do Elixir via scripts e compilação.
  3. Aplique o operador de correspondência (=), o operador de pinça (^) e o curinga (_) para desestruturar e validar dados.
  4. Explique as implicações teóricas e práticas da imutabilidade sobre desempenho e gerenciamento de memória.
  5. Identifique e utilize os tipos internos do Elixir, incluindo tipos Valor, Sistema e Coleção.
  6. Aplique as regras de escopo de variáveis e a expressão with para gerenciar transformações de dados complexas.
  7. Crie e invoque funções anônimas usando ambas as notações padrão e de captura (&).
  8. Implemente funções nomeadas dentro de módulos usando correspondência de padrões e recursão para lidar com lógicas complexas.
  9. Aplique cláusulas de guarda e parâmetros padrão para controlar o fluxo de execução das funções.
  10. Desconstruir e Construir Listas: Use correspondência de padrões cabeça/cauda para navegar e construir estruturas listas recursivas.

🔹 Aula 1: Introdução ao Elixir e Correspondência de Padrões

Visão Geral: Esta aula apresenta o Elixir como uma linguagem funcional centrada na transformação de dados, em vez da mutação de estado. Os alunos aprenderão a navegar no ambiente Elixir (IEx), compilar e executar scripts e dominar a Correspondência de Padrões — o mecanismo fundamental que o Elixir utiliza para vinculação de variáveis e fluxo de controle.

Resultados de Aprendizagem:

  • Contraste o modelo de transformação de dados do Elixir com a programação convencional baseada em estado.
  • Configure o shell interativo do Elixir (IEx) e execute código Elixir via scripts e compilação.
  • Aplique o operador de correspondência (=), o operador de pinça (^) e o curinga (_) para desestruturar e validar dados.

🔹 Aula 2: Imutabilidade e Noções Básicas do Elixir

Visão Geral: Esta aula explora a filosofia fundamental do Elixir: a imutabilidade. Os alunos aprenderão como o Elixir trata os dados como entidades imutáveis, os benefícios de desempenho dessa abordagem e os diversos tipos internos — desde tipos simples como átomos e intervalos até coleções complexas como mapas e binários. A aula conclui com um aprofundamento no escopo de variáveis e na poderosa expressão with.

Resultados de Aprendizagem:

  • Explique as implicações teóricas e práticas da imutabilidade sobre desempenho e gerenciamento de memória.
  • Identifique e utilize os tipos internos do Elixir, incluindo tipos Valor, Sistema e Coleção.
  • Aplique as regras de escopo de variáveis e a expressão with para gerenciar transformações de dados complexas.

🔹 Aula 3: Funções, Módulos e o Operador Pipeline

Visão Geral: Esta aula explora o cerne da programação em Elixir: a transformação funcional. Aborda a transição de funções anônimas e fechamentos para módulos estruturados e funções nomeadas. Os alunos aprenderão a aproveitar a correspondência de padrões, recursão e o operador pipeline para criar códigos concisos, legíveis e mantíveis, enquanto interagem com a VM subjacente do Erlang.

Resultados de Aprendizagem:

  • Crie e invoque funções anônimas usando ambas as notações padrão e de captura (&).
  • Implemente funções nomeadas dentro de módulos usando correspondência de padrões e recursão para lidar com lógicas complexas.
  • Aplique cláusulas de guarda e parâmetros padrão para controlar o fluxo de execução das funções.

🔹 Aula 4: Listas Recursivas e Estruturas de Dados

Visão Geral: Esta aula cobre os mecanismos fundamentais das listas do Elixir por meio da recursão, focando especificamente no padrão "Cabeça e Cauda" para processar e construir dados. Transita para estruturas de dados complexas — Mapas, Estruturas e Listas de Palavras-Chave — fornecendo um framework de decisão para selecionar a estrutura adequada e técnicas avançadas para manipular dados aninhados usando o módulo Access e a teoria de tipos do Elixir.

Resultados de Aprendizagem:

  • Desconstruir e Construir Listas: Use correspondência de padrões cabeça/cauda para navegar e construir estruturas de lista recursivas.
  • Implementar Padrões de Alta Ordem: Crie funções personalizadas map e reduce para transformar ou agregadar dados de listas.
  • Selecionar Estruturas de Dados Adequadas: Diferencie entre Mapas, Estruturas e Listas de Palavras-Chave com base em requisitos de desempenho, ordenação e integridade de dados.

🔹 Aula 5: Enumerações, Streams e Processamento de Strings

Visão Geral: Esta aula explora a abordagem dual para o processamento de coleções no Elixir: o módulo Enum, que é agressivo, e o módulo Stream, que é preguiçoso e componível. Também oferece uma análise profunda da transformação de dados por meio de compreensões e dos mecanismos internos das strings do Elixir, diferenciando entre listas de caracteres (entre apóstrofos simples) e binários (entre aspas duplas). Os alunos aprenderão a processar estruturas de dados complexas, lidar com dados infinitos e realizar extração de bits em nível baixo.

Resultados de Aprendizagem:

  • Diferencie entre avaliação agressiva e preguiçosa ao processar coleções.
  • Utilize compreensões de listas com múltiplos geradores e filtros para transformar dados e extrair informações a nível de bit.
  • Diferencie entre strings entre apóstrofos simples (listas de caracteres) e strings entre aspas duplas (binários) e aplique o módulo correto (List vs. String) para manipulação.

🔹 Aula 6: Fluxo de Controle, Projetos Mix e Ferramentas Profissionais

Visão Geral: Esta aula orienta desenvolvedores na transição de escrever funções Elixir isoladas para construir, testar e monitorar aplicações de qualidade profissional. Cobertura de estruturas de controle avançadas (case, cond), o ciclo de vida de um projeto Mix (da estrutura de diretórios aos executáveis CLI) e a suíte de ferramentas profissionais usadas para depuração, teste baseado em propriedades e monitoramento de servidores.

Resultados de Aprendizagem:

  • Implemente lógica de ramificação complexa usando case, cond e tratamento de exceções.
  • Estruture projetos Elixir usando Mix, gerencie dependências externas como HTTPoison e Poison, e configure ambientes de aplicação.
  • Desenvolva suites de testes robustas utilizando ExUnit, DocTest e teste baseado em propriedades com StreamData.

🔹 Aula 7: Concorrência e Nós Distribuídos

Visão Geral: Esta aula explora a transição de aplicações Elixir de um único processo para sistemas distribuídos. Aborda os mecanismos de tratamento de mensagens, persistência de processos por meio de loops recursivos de cauda e a gestão robusta dos ciclos de vida dos processos via vínculos e monitoramento. Por fim, introduz o modelo de distribuição da VM Erlang, ensinando como conectar nós, protegê-los com cookies e lidar com I/O em rede.

Resultados de Aprendizagem:

  • Implemente processos estatais e persistentes usando recursão de cauda e timeouts de mensagens.
  • Construa árvores de processos tolerantes a falhas usando vinculação (spawn_link) e monitoramento (spawn_monitor).
  • Configure e conecte nós distribuídos usando convenções de nomeação, cookies de segurança e registro global de processos.

🔹 Aula 8: Fundamentos do OTP: Servidores e Supervisores

Visão Geral: Esta aula apresenta o framework Open Telecom Platform (OTP) no ecossistema Elixir, focando especificamente no comportamento GenServer e nos padrões Supervisor. Os alunos aprenderão a construir processos de servidor robustos e estatais, diferenciar entre comunicação síncrona e assíncrona e implementar árvores de supervisão tolerantes a falhas que gerenciam automaticamente os ciclos de vida dos processos.

Resultados de Aprendizagem:

  • Defina os componentes centrais do OTP e implemente o ciclo de vida padrão de callbacks do GenServer.
  • Diferencie e implemente padrões de mensagem síncronas (call) e assíncronas (cast).
  • Configure e implante um Supervisor para monitorar processos trabalhadores e manter a confiabilidade do sistema em caso de falhas.

🔹 Aula 9: Arquiteturas Complexas do OTP e Gerenciamento de Estado

Visão Geral: Esta aula transita de GenServers individuais para o design e implantação de aplicações OTP complexas e multi-componentes. Aborda o design arquitetônico do "Duper", um encontrador de arquivos duplicados, os mecanismos das especificações de aplicação OTP e técnicas avançadas de implantação, incluindo atualizações quentes usando Distillery. Além disso, explora alternativas simplificadas de gerenciamento de estado como Tasks e Agents, fornecendo um quadro para escolher a ferramenta certa conforme as necessidades de concorrência específicas.

Resultados de Aprendizagem:

  • Analise os requisitos da aplicação usando o framework de cinco perguntas para identificar pontos focais e características de tempo de execução.
  • Construa uma aplicação OTP multi-servidor (Duper) utilizando servidores especializados (Results, PathFinder, Gatherer) e Supervisores Dinâmicos.
  • Realize lançamentos de código e atualizações quentes usando Distillery, incluindo migração de estado via callback code_change.

🔹 Aula 10: Metaprogramação, Protocolos e Segurança de Tipos

Visão Geral: Esta aula explora a extensibilidade avançada do Elixir, focando em como manipular código como dados por meio de metaprogramação e macros. Os alunos aprenderão a alcançar polimorfismo usando Protocolos e Comportamentos, estruturar sistemas de grande escala com projetos Umbrella e implementar tratamento robusto de erros. Finalmente, a aula aborda a adição de uma camada de análise estática usando o sistema de tipos do Elixir e Dialyzer para garantir a correção do código.

Resultados de Aprendizagem:

  • Domine o uso de quote e unquote para injetar e manipular blocos de código dentro de macros.
  • Implemente Protocolos e Comportamentos personalizados para criar estruturas de código polimórficas e reutilizáveis.
  • Construa projetos Umbrella multi-aplicativos e aplique especificações formais de tipos a código Elixir dinâmico.