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

Post on 15-Apr-2017

321 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

elixirO que existe atrás do mistério

Email:alex@dsol.com.brGithub:/alexferreira

FullStack developer,NodeJs,Elixir,Ruby,EmberJs,Sass,Stylus,Fotografonashorasvagas.

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 eModularidade

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 eModularidade

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

12345

-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

12345

defmodule HelloWorld dodef 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ásicosOs tipos básicos do elixir são: integer, floats, booleans, atoms, strings, lists e tuples1 #inteiro0x1f #inteiro1.0 #floatTrue #boolean:atom #atom/symbol”elixir” #string[9,8,7,6] #list{5,6,7,8} #tuple

Tipos Básicos - InteirosElixir também suporta a conversão de números binários, octais e hexadecimais para inteiros:

Tipos Básicos - FloatO pontos flutuantes necessitam de um ponto, seguindo por, pelo menosum dígito; estes possuem uma precisão de 64 bits e suportam e para números exponenciais.

Tipos Básicos - FloatVocê 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 – BooleansElixir 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. Algumasoutras linguagens chamam estes símbolos:

Tipos Básicos – AtomsValores booleanos true e false, são de fato atoms:

Tipos Básicos - StringAs 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 - ListsAs 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 caudada 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 elementosrestantes.

Tipos Básicos – Lists – Cabeça e Cauda

Vamos atribuir uma lista para uma variável e recuperar a sua cabeçae 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éticaElixir 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 – caseO case nos permite comparar um valor contra muitos padrões até encontrarmos um que corresponda

Controle de Fluxo – caseO uso da variável _ é uma importante inclusão na declaração do case.

Controle de Fluxo – caseConsidere o _ como o else que irá igualar com todo o resto

Controle de Fluxo – caseSe você pretende encontrar correspondência em variáveis existentes, você precisará do operador ^

Controle de Fluxo – caseOutra característica interessante do case é o seu suporte a cláusulasde guarda

Controle de Fluxo – condEm muitas circunstâncias, queremos verificar condições diferentes e encontrar o primeiro resultado correspondente. Em tais casos recorremos ao cond

Controle de Fluxo – condSe 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 unlessNo Elixir o if e unless são definidos como macros, não construtores de linguagem.

Controle de Fluxo – if e unlessO unless é bem parecido ao uso do if porém trabalhando de forma negativa

Modulo

Módulos – Funções NomeadasDentro de um módulo, podemos definir funcões com def e funções privadas com defp.

Módulos – Funções NomeadasFunção reduzida

Módulos – Funções NomeadasFunção privada

Módulos – Funções NomeadasUsando cláusulas de guarda

Módulos – Funções NomeadasArgumentos 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 projetosO 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 – FatorialCriar modulo Factorial, contendo o método of

Exercicio – Somando ListaCriar modulo MyList, com métodos sum

• Deverá passar uma lista para o método do modulo retornando o valor total

Exercício – Sequencia de FibonacciCriar módulo Fibonacci, com métodos fib

Exercicio – CalculadoraCriar 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 – FizzBuzzCriar 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.brGithub:/alexferreira

top related