Os fundamentos de Elixir ficam mais claros quando você acompanha como os dados mudam de forma: uma função recebe um valor, transforma-o em outro e devolve o resultado, sem alterar o original. Pratique primeiro com texto e coleções; depois use pattern matching, recursão e testes para entender não só o que funciona, mas também onde cada abordagem deixa de ser adequada.
Comece seguindo os dados por uma transformação
Elixir é uma linguagem funcional: em vez de modificar uma estrutura existente, você calcula um novo valor a partir dela. Essa ideia aparece em pipelines, nos quais o resultado de uma etapa passa à seguinte. A página oficial usa um exemplo que converte texto para minúsculas, remove pontuação, separa palavras e conta frequências (documentação oficial de Elixir).
Exercício: conte palavras sem perder de vista cada tipo
No IEx, o shell interativo de Elixir, experimente:
texto = "Elixir transforma dados. Elixir compõe funções!"
frequencias =
texto
|> String.downcase()
|> String.replace(~r/[^p{L}s]/u, "")
|> String.split()
|> Enum.frequencies()
O resultado é um mapa com cada palavra como chave e sua contagem como valor, por exemplo %{"compõe" => 1, "dados" => 1, "elixir" => 2, "funções" => 1, "transforma" => 1}. Narre o tipo de valor em cada etapa:
textoé uma string.String.downcase/1devolve outra string, agora em minúsculas.String.replace/3devolve uma string sem os sinais de pontuação correspondentes ao padrão.String.split/1devolve uma lista de palavras.Enum.frequencies/1devolve um mapa de valores para contagens.
O pipeline não altera texto; frequencias recebe um novo resultado. Neste exemplo, a expressão regular mantém letras Unicode e espaços. As regras para pontuação e separação dependem do problema: por exemplo, hífens e apóstrofos podem precisar de tratamento próprio.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
Contraexemplo: confundir vinculação com mutação
Em Elixir, = não funciona como atribuição imperativa que atualiza uma variável mutável. Ele faz correspondência de padrões e, quando o padrão permite, vincula nomes a valores:
original = %{tentativas: 1}
atualizado = Map.put(original, :tentativas, 2)
original[:tentativas] # 1
atualizado[:tentativas] # 2
Map.put/3 produz um mapa com o valor atualizado; original continua associado ao mapa anterior. Você pode vincular um nome a esse novo valor, como em atualizado, mas isso não altera retroativamente o valor original.
Use pattern matching para decompor e selecionar
Pattern matching, ou correspondência de padrões, é uma ferramenta central de Elixir. Um padrão pode extrair partes de uma estrutura e também determinar qual cláusula de função se aplica. Isso vai além de testar se dois valores são iguais: você descreve a forma dos dados que espera encontrar. A trilha de Elixir do Exercism apresenta cláusulas múltiplas, padrões e guards entre os blocos de construção da linguagem (trilha Elixir do Exercism).
Exercício: classifique formatos explícitos
Defina cláusulas que reconheçam uma tupla de mensagem ou um mapa de evento:
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →defmodule Classificador do
def classificar({:mensagem, texto}) when is_binary(texto) do
{:texto, texto}
end
def classificar(%{tipo: :temperatura, celsius: valor})
when is_number(valor) do
{:temperatura, valor}
end
def classificar(_entrada) do
{:formato_desconhecido}
end
end
A primeira cláusula corresponde a uma tupla cuja primeira posição é :mensagem e cuja segunda posição é uma string. A segunda extrai campos de um mapa e usa um guard para aceitar somente valores numéricos. A última cláusula captura o que não corresponde aos formatos aceitos.
Contraexemplo: uma cláusula genérica que esconde formatos diferentes
Uma função que recebe qualquer entrada e tenta descobrir seu significado com uma longa sequência de condicionais pode esconder as formas de dados que o programa realmente aceita. Padrões e cláusulas explícitas tornam essas formas visíveis. Por outro lado, aceitar tudo com um padrão genérico e devolver um resultado aparentemente válido pode mascarar dados inválidos. Se entradas fora do formato forem erros, valide-as deliberadamente e decida como representá-las, em vez de tratá-las silenciosamente como um caso normal.
Não há uma única organização correta para todas as funções. Prefira cláusulas distintas quando elas esclarecem casos realmente diferentes; use guards para restrições que complementam a forma do padrão, não como substituto de uma definição clara dos formatos de entrada.
Compare recursão com Enum conforme a intenção
Recursão é uma forma de processar estruturas repetindo uma função sobre partes menores do dado. Bibliotecas como Enum oferecem operações comuns sobre coleções; vale aprender os dois estilos para reconhecer quando cada um torna a intenção mais legível. A página oficial de aprendizagem inclui recursão e funções de ordem superior em sua trilha (recursos oficiais para aprender Elixir).
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #3
Exercício: some uma lista recursivamente
defmodule Lista do
def somar([]), do: 0
def somar([cabeca | cauda]), do: cabeca + somar(cauda)
end
Lista.somar([2, 3, 5]) # 10
O padrão [] é o caso-base: a soma de uma lista vazia é zero. O padrão [cabeca | cauda] separa o primeiro elemento do restante; a função soma a cabeça ao resultado da chamada recursiva sobre a cauda.
Contraexemplo: escrever recursão manual para uma operação comum
Se o objetivo é simplesmente reduzir valores numéricos, Enum.sum/1 expressa essa intenção de maneira direta:
Enum.sum([2, 3, 5]) # 10
Recursão é útil quando você precisa controlar a decomposição, aprender como uma coleção é processada ou implementar uma regra específica. Para uma operação padrão sobre uma coleção, uma função de Enum pode evitar código repetitivo. A escolha deve tornar a transformação mais fácil de ler, não demonstrar recursão a qualquer custo.
Trate anti-patterns como sinais para avaliar
Uma anti-pattern é um erro recorrente ou indício de um problema de código, também chamado code smell. A referência oficial organiza os exemplos em categorias relacionadas a código, design, processo e metaprogramação. Cada guia apresenta o problema e exemplos de refatoração, mas identificar um padrão não significa que seja obrigatório reescrever o trecho (referência oficial de anti-patterns).
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesExercício: avalie antes de refatorar
Ao encontrar um padrão descrito como problemático, responda:
- Qual problema concreto ele pode causar neste código?
- Esse risco aparece no contexto atual ou é apenas uma semelhança superficial?
- A alternativa proposta deixa o comportamento mais claro e preserva os requisitos?
- Os testes existentes verificam o comportamento que a mudança precisa manter?
A documentação destaca que contexto importa: uma forma que lembra uma anti-pattern ainda pode ser a melhor escolha para uma situação específica. O trabalho incorporado ao Elixir v1.16 organizou e refinou esses guias, que podem evoluir com a comunidade (anúncio do Elixir v1.16).
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Junte os fundamentos em um projeto pequeno
Um projeto integrador mostra como funções, estado imutável, padrões e testes trabalham juntos. O Toy Robot é um exemplo: represente a posição e a orientação de um robô em uma mesa; interprete comandos para movê-lo, girá-lo e reportar seu estado. O livro Toy Robot - The Elixir Version descreve uma implementação como aplicação Mix e trabalha com ExUnit, doctests e escolhas de pattern matching.
Exercício: defina as regras antes da implementação
Para uma variante simples, escreva testes e funções para estes comportamentos:
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchBest Value
- Representar posição e orientação iniciais do robô.
- Aceitar comandos válidos de movimento, rotação e relatório.
- Impedir que um movimento leve o robô para fora da mesa.
- Devolver o estado resultante de cada comando.
- Reportar posição e orientação no formato definido pelo exercício.
Na variante descrita pelo livro, a mesa mede 5×5 e os comandos são escritos em maiúsculas. Essas são regras daquela versão do problema, não propriedades de Elixir nem requisitos universais do Toy Robot. Especifique também como sua implementação lida com comandos desconhecidos e posições iniciais inválidas: sem uma regra explícita, duas soluções podem se comportar de maneiras diferentes.
Contraexemplo: misturar regras do exercício com regras da linguagem
Pattern matching pode ajudar a distinguir comandos como :andar, :virar_esquerda e :relatar, mas a linguagem não exige esse conjunto de comandos, esse tamanho de mesa ou esse formato textual. Trate essas escolhas como requisitos do projeto, teste-as e mantenha-as separadas das ferramentas gerais de Elixir.
Elixir já faz análise de tipos?
Não é correto dizer que Elixir não tem nenhuma análise de tipos, nem que a linguagem já oferece tipagem estática completa. No anúncio do Elixir v1.20, publicado em 3 de junho de 2026, José Valim descreve a primeira etapa de inferência e verificação gradual: analisar programas sem exigir anotações e encontrar violações de tipo que certamente falhariam em tempo de execução. O anúncio também descreve trabalho ainda necessário para avançar em áreas como tipos recursivos e paramétricos, travessia de mapas e futuras assinaturas de tipo (anúncio do Elixir v1.20).
A distinção prática é entre capacidades já descritas nessa etapa e recursos ainda em desenvolvimento. Não trate a inferência anunciada como garantia de que qualquer erro de tipo será detectado antes da execução, nem como substituta de testes.
Escolha exercícios e confira a compatibilidade
Para praticar fundamentos, a trilha do Exercism combina exercícios com análise automatizada e mentoria voluntária. A página consultada em 2 de outubro de 2026 listava 168 exercícios e 58 conceitos; esse catálogo pode mudar. A página oficial de aprendizagem também reúne livros, cursos e outros recursos, com opções para níveis e objetivos diferentes.
Se quiser passar de exercícios curtos a um projeto com testes, o Toy Robot é uma possibilidade; sua versão em Leanpub informa PDF e EPUB e uma atualização em 15 de julho de 2024. Essa disponibilidade e data dizem respeito à página do livro, não à versão atual do Elixir.
Para instalar Elixir, confira a documentação oficial em vez de assumir que qualquer combinação de versões funciona. Em 2 de outubro de 2026, ela identificava Elixir v1.20.4 como estável e Erlang/OTP 27, 28 e 29 como versões suportadas. A lista é temporal: verifique as versões e instruções de instalação novamente quando for configurar seu ambiente (documentação oficial de Elixir).
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Recommended Free Tools

