Uma linguagem dinâmica e funcional, projetada para o desenvolvimento de aplicações escaláveis e sustentáveis.
O Elixir aproveita o Erlang VM, conhecido por ter uma execução de baixa latência, usado em sistemas distribuídos e tolerantes a falhas.
Exércicios: https://github.com/alexferreira/workshop_elixir
8. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
9. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
10. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
11. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
12. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
13. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
14. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
15. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
16. Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
Sistemas Distribuídos Aplicações Web
?
17. Que faça-se a luz
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
18. Que faça-se a luz
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
• Fácil Prototipação
• Fácil Manutenção
• Fácil Evolução
22. Porque ELIXIR?
Semântica, Eficiência, Confiabilidade
Facilidade do Ruby e Experiência
”Eu gostei de tudo que vi em Erlang, mas eu odiava as
coisas que eu não vi” José Valim
23. Porque ELIXIR?
Semântica, Eficiência, Confiabilidade
Ferramentas e Modularidade
Facilidade do Ruby e Experiência
”Eu gostei de tudo que vi em Erlang, mas eu odiava as
coisas que eu não vi” José Valim
24. Porque ELIXIR?
Semântica, Eficiência, Confiabilidade
Ferramentas e Modularidade
Facilidade do Ruby e Experiência
”Eu gostei de tudo que vi em Erlang, mas eu odiava as
coisas que eu não vi” José Valim
Macros
25. Elixir é uma linguagem dinâmica e funcional projetada para
construir aplicações escaláveis e de fácil manutenção.
29. Tipos Básicos
Os tipos básicos do elixir são: integer, floats, booleans,
atoms, strings, lists e tuples
1 #inteiro
0x1f #inteiro
1.0 #float
True #boolean
:atom #atom / symbol
”elixir” #string
[9,8,7,6] #list
{5,6,7,8} #tuple
30. Tipos Básicos - Inteiros
Elixir também suporta a conversão de números binários, octais e
hexadecimais para inteiros:
31. Tipos Básicos - Float
O pontos flutuantes necessitam de um ponto, seguindo por, pelo menos
um dígito; estes possuem uma precisão de 64 bits e suportam e para
números exponenciais.
32. Tipos Básicos - Float
Você pode chamar a função round para obter o número inteiro mais
próximo, ou a função trunc para obter a parte inteira de um float.
33. Tipos Básicos – Booleans
Elixir suporta true e false como valores booleanos; todo valor é
verdadeiro com excessão de false e nil:
34. Tipos Básicos – Atoms
Átomos são constantes, onde seu nome é o seu próprio valor. Algumas
outras linguagens chamam estes símbolos:
35. Tipos Básicos – Atoms
Valores booleanos true e false, são de fato atoms:
36. Tipos Básicos - String
As strings em Elixir são codificadas em utf-8 e são representadas com
aspas duplas, suporta quebras de linhas, caracteres de escape e
interpolação.
37. Tipos Básicos - Lists
As listas são simples coleções de valores, elas podem incluir múltiplos
tipos; listas podem incluir valores não-exclusivos:
Elixir implementa listas como listas encadeadas. Isso significa que acessar
a profundidade da lista é uma operação O(n).
38. Tipos Básicos – Lists - Concatenando e Subtraindo
A concatenação de listas usa o operador ++/2
O suportare para subtração é provido pelo operador --/2.
É seguro subtrair um valor que não existe, isso não retorna um erro.
39. Tipos Básicos – Lists – Cabeça e Cauda
Quando usamos listas é comum trabalhar com a cabeça e a cauda
da lista.
O Elixir provê funções úteis para trabalhar com essas partes,
são elas hd e tl
A cabeça é o primeiro elemento da lista e a cauda são os elementos
restantes.
40. Tipos Básicos – Lists – Cabeça e Cauda
Vamos atribuir uma lista para uma variável e recuperar a sua cabeça
e a cauda:
41. Tipos Básicos – Lists – Cabeça e Cauda
Além das funções citadas, podemos utilizar o o operador pipe |;
42. Tipos Básicos – Tuples
O Elixir usa chaves para definir tuples, assim como as listas as tuples
podem conter qualquer valor.
43. Tipos Básicos – Tuples
As tuples são armazenadas de forma contígua na memória.
Permitindo o acesso a sua profundidade de forma rápida.
44. Tipos Básicos – Tuples
Também é possível modificar um elemento em um índice especifico
usando a função put_elem
49. Controle de Fluxo – case
O case nos permite comparar um valor contra muitos padrões até
encontrarmos um que corresponda
50. Controle de Fluxo – case
O uso da variável _ é uma importante inclusão na declaração do
case.
51. Controle de Fluxo – case
Considere o _ como o else que irá igualar com todo o resto
52. Controle de Fluxo – case
Se você pretende encontrar correspondência em variáveis existentes,
você precisará do operador ^
53. Controle de Fluxo – case
Outra característica interessante do case é o seu suporte a cláusulas
de guarda
54. Controle de Fluxo – cond
Em muitas circunstâncias, queremos verificar condições diferentes e
encontrar o primeiro resultado correspondente. Em tais casos
recorremos ao cond
55. Controle de Fluxo – cond
Se nenhuma das condições corresponder será gerado um erro assim
como no case. Por esta razão, pode ser necessário adicionar uma
condição final
56. Controle de Fluxo – if e unless
No Elixir o if e unless são definidos como macros, não construtores de
linguagem.
57. Controle de Fluxo – if e unless
O unless é bem parecido ao uso do if porém trabalhando de forma
negativa
75. Exercicio – Calculadora
Criar modulo Calculator, com método result.
A calculadora deve executar as seguintes operações
• Somar
• Subtrair
• Multiplicar
• Dividir
• Checar se a opração é valida
• Deve-se utilizar o tuple para calcular, ex: {:soma, 1, 2}
76. Exercicio – FizzBuzz
Criar modulo FizzBuzz, com métodos parse e create
• Números divisíveis por 3 devem ser substituidos por Fizz
• Números divisíveis por 5 devem ser substituidos por Buzz
• Números divisíveis por 3 e 5 devem ser substituidos por FizzBuzz
78. Sintaxe agora não é mais desculpa! Nem o
ferramental, nem a comunidade, nem a disponibilidade
de bibliotecas e etc, etc, etc.
Sejam Bem-vindos ao mundo dos alquimistas!