SlideShare une entreprise Scribd logo
1  sur  79
Télécharger pour lire hors ligne
elixir
O que existe atrás do mistério
Email:	alex@dsol.com.br
Github:	/alexferreira
FullStack developer,	NodeJs,	Elixir,	Ruby,	
EmberJs,	Sass,	Stylus,	Fotografo	nas	horas	
vagas.		
Quem sou eu
Linguagem de programação criada em 1986
e ja está no mercado a 30 anos.
Usado por
AXD-301
AXD-301
Disponibilidade 99.9999999%
Offline 0.6 segundos em 20 anos
Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
Guerra dos mundos
• Eficiência e confiabilidade
• Programação Concorrente
• Tolerante a falhas
• Suporte à programação de
sistemas distribuídos
Sistemas Distribuídos
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
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
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
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
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
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
?
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
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
Porque ELIXIR?
Porque ELIXIR?
”Eu gostei de tudo que vi em Erlang, mas eu odiava as
coisas que eu não vi” José Valim
Porque ELIXIR?
Semântica, Eficiência, Confiabilidade
”Eu gostei de tudo que vi em Erlang, mas eu odiava as
coisas que eu não vi” José Valim
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
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
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
Elixir é uma linguagem dinâmica e funcional projetada para
construir aplicações escaláveis e de fácil manutenção.
Comparativo
1
2
3
4
5
-module(hello_world).
-compile(export_all).
say_hello(Name) →
io:print(“Hello ~p~n”, [Name]).
Há quem diga que o problema é a linguagem ser funcional, outros
que reclamam do suporte a testes, outros da nomenclatura
utilizada, outros da falta de ferramentas e etc.
Comparativo
1
2
3
4
5
defmodule HelloWorld do
def say_hello(name) do
IO.puts “Hello #{name}”
end
end
A estrutura é simples e muito familiar
para quem já lê código Ruby.
Tipos Básicos
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
Tipos Básicos - Inteiros
Elixir também suporta a conversão de números binários, octais e
hexadecimais para inteiros:
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.
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.
Tipos Básicos – Booleans
Elixir suporta true e false como valores booleanos; todo valor é
verdadeiro com excessão de false e nil:
Tipos Básicos – Atoms
Átomos são constantes, onde seu nome é o seu próprio valor. Algumas
outras linguagens chamam estes símbolos:
Tipos Básicos – Atoms
Valores booleanos true e false, são de fato atoms:
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.
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).
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.
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.
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:
Tipos Básicos – Lists – Cabeça e Cauda
Além das funções citadas, podemos utilizar o o operador pipe |;
Tipos Básicos – Tuples
O Elixir usa chaves para definir tuples, assim como as listas as tuples
podem conter qualquer valor.
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.
Tipos Básicos – Tuples
Também é possível modificar um elemento em um índice especifico
usando a função put_elem
Operações Básicas
Operações Básicas - Aritmética
Elixir suporta os operadores básicos +, -, * e / como era de se
esperar.
Operações Básicas – Aritmética
Estruturas de Controle de fluxo
Controle de Fluxo – case
O case nos permite comparar um valor contra muitos padrões até
encontrarmos um que corresponda
Controle de Fluxo – case
O uso da variável _ é uma importante inclusão na declaração do
case.
Controle de Fluxo – case
Considere o _ como o else que irá igualar com todo o resto
Controle de Fluxo – case
Se você pretende encontrar correspondência em variáveis existentes,
você precisará do operador ^
Controle de Fluxo – case
Outra característica interessante do case é o seu suporte a cláusulas
de guarda
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
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
Controle de Fluxo – if e unless
No Elixir o if e unless são definidos como macros, não construtores de
linguagem.
Controle de Fluxo – if e unless
O unless é bem parecido ao uso do if porém trabalhando de forma
negativa
Modulo
Módulos – Funções Nomeadas
Dentro de um módulo, podemos definir funcões com def e funções
privadas com defp.
Módulos – Funções Nomeadas
Função reduzida
Módulos – Funções Nomeadas
Função privada
Módulos – Funções Nomeadas
Usando cláusulas de guarda
Módulos – Funções Nomeadas
Argumentos padrões
Funcões anonimas e abreviadas
Funções anônimas e abreviadas
Conhecendo o MIX
Conhecendo o MIX
Se você estiver familiarizado com Ryby, o mix é o Bundler,
RubyGems e o Rake juntos.
Conhecendo o MIX – Criando novos projetos
O mix faz com que a crianção do projeto seja facil utilizando o
comando mix new
Conhecendo o MIX – Criando novos projetos
Conhecendo o MIX – Gegenciando Dependencias
Uma vez que definimos nossas dependencias
Usaremos o comando abaixo para instalar as dependencias.
Exercícios
Exercicio – Fatorial
Criar modulo Factorial, contendo o método of
Exercicio – Somando Lista
Criar modulo MyList, com métodos sum
• Deverá passar uma lista para o método do modulo retornando o
valor total
Exercício – Sequencia de Fibonacci
Criar módulo Fibonacci, com métodos fib
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}
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
Aprendendo mais
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!
Obrigado
Email:	alex@dsol.com.br
Github:	/alexferreira

Contenu connexe

Tendances

Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
Lógica de programação 4
Lógica de programação 4Lógica de programação 4
Lógica de programação 4José Lopes
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonFlávio Ribeiro
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Tchelinux
 

Tendances (12)

Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Lógica de programação 4
Lógica de programação 4Lógica de programação 4
Lógica de programação 4
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
Aula02
Aula02Aula02
Aula02
 
Comandos de controle de fluxo do php
Comandos de controle de fluxo do phpComandos de controle de fluxo do php
Comandos de controle de fluxo do php
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Introdução a Python
Introdução a PythonIntrodução a Python
Introdução a Python
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 

Similaire à Elixir - o que existe atrás do mistério

Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Elmish com xamarin.forms
Elmish com xamarin.formsElmish com xamarin.forms
Elmish com xamarin.formsLucas Teles
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Felipe Borges
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elmLucas Teles
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 

Similaire à Elixir - o que existe atrás do mistério (20)

Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Oz
OzOz
Oz
 
Elmish com xamarin.forms
Elmish com xamarin.formsElmish com xamarin.forms
Elmish com xamarin.forms
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
Clean code
Clean codeClean code
Clean code
 
Assembly
AssemblyAssembly
Assembly
 
424928
424928424928
424928
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
Clean code
Clean codeClean code
Clean code
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 

Elixir - o que existe atrás do mistério

  • 1. elixir O que existe atrás do mistério
  • 3.
  • 4. Linguagem de programação criada em 1986 e ja está no mercado a 30 anos.
  • 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
  • 20. Porque ELIXIR? ”Eu gostei de tudo que vi em Erlang, mas eu odiava as coisas que eu não vi” José Valim
  • 21. Porque ELIXIR? Semântica, Eficiência, Confiabilidade ”Eu gostei de tudo que vi em Erlang, mas eu odiava as coisas que eu não vi” José Valim
  • 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.
  • 26. Comparativo 1 2 3 4 5 -module(hello_world). -compile(export_all). say_hello(Name) → io:print(“Hello ~p~n”, [Name]). Há quem diga que o problema é a linguagem ser funcional, outros que reclamam do suporte a testes, outros da nomenclatura utilizada, outros da falta de ferramentas e etc.
  • 27. Comparativo 1 2 3 4 5 defmodule HelloWorld do def say_hello(name) do IO.puts “Hello #{name}” end end A estrutura é simples e muito familiar para quem já lê código Ruby.
  • 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
  • 46. Operações Básicas - Aritmética Elixir suporta os operadores básicos +, -, * e / como era de se esperar.
  • 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
  • 59. Módulos – Funções Nomeadas Dentro de um módulo, podemos definir funcões com def e funções privadas com defp.
  • 60. Módulos – Funções Nomeadas Função reduzida
  • 61. Módulos – Funções Nomeadas Função privada
  • 62. Módulos – Funções Nomeadas Usando cláusulas de guarda
  • 63. Módulos – Funções Nomeadas Argumentos padrões
  • 64. Funcões anonimas e abreviadas
  • 65. Funções anônimas e abreviadas
  • 67. Conhecendo o MIX Se você estiver familiarizado com Ryby, o mix é o Bundler, RubyGems e o Rake juntos.
  • 68. Conhecendo o MIX – Criando novos projetos O mix faz com que a crianção do projeto seja facil utilizando o comando mix new
  • 69. Conhecendo o MIX – Criando novos projetos
  • 70. Conhecendo o MIX – Gegenciando Dependencias Uma vez que definimos nossas dependencias Usaremos o comando abaixo para instalar as dependencias.
  • 72. Exercicio – Fatorial Criar modulo Factorial, contendo o método of
  • 73. Exercicio – Somando Lista Criar modulo MyList, com métodos sum • Deverá passar uma lista para o método do modulo retornando o valor total
  • 74. Exercício – Sequencia de Fibonacci Criar módulo Fibonacci, com métodos fib
  • 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!