Lessons: Advanced
Taking our knowledge to the next level, these lessons get cover the advanced topics of Elixir and the BEAM.
Já olhamos as abstrações em Elixir para concorrência, mas as vezes precisamos de um controle maior e para isso nós temos os comportamentos OTP no qual Elixir é construída em cima.
Nessa lição vamos nos focar na peça mais importante: GenServers
Supervisores são processos especializados com um propósito: monitorar outros processos. Estes supervisores nos possibilitam a criação de aplicações tolerantes a falhas automaticamente reiniciando processos filhos quando eles falham.
Podemos executar nossas aplicações Elixir em um conjunto diferente de nós de processamento (nodes) distribuídos em um único servidor ou entre múltiplos servidores. Elixir permite que nos comuniquemos entre esses nós de processamento por meio de alguns mecanismos diferentes, os quais iremos destacar nesta lição.
Metaprogramação é o processo de utilização de código para escrever código. Em Elixir isso nos dá a capacidade de estender a linguagem para se adequar às nossas necessidades e dinamicamente alterar o código. Vamos começar observando como Elixir é representado por debaixo dos panos, em seguida como modificá-lo, e finalmente, como podemos usar esse conhecimento para estendê-la.
Uma palavra de cautela: Metaprogramação é complicado e só deve ser usado quando for absolutamente necessário. O uso excessivo certamente levará a um código complexo que é difícil de entender e debugar
Em determinados momentos um projeto pode ficar enorme, realmente enorme. A ferramenta de construção Mix nos permite dividir nosso código em vários aplicativos e fazer nossos projetos em Elixir mais manejáveis à medida que crescem.
Nessa lição vamos aprender sobre a sintaxe de @spec
e @type
. O primeiro é mais uma sintaxe complementar para escrever documentação que pode ser analisada por ferramentas. A segunda nos ajuda a escrever código de fácil leitura e entendimento.
Aprendemos sobre Typespecs na lição anterior, aqui vamos aprender como exigir que um módulo implemente essas especificações. No Elixir, essa funcionalidade é referenciada como comportamentos.
Nesta lição nós iremos aprender um pouco sobre Protocols, o que eles são e como usamos ele em Elixir.