SlideShare a Scribd company logo
Elixir em um
final de semana
Pergunte-me como!
@marcosbrizeno
Quem sou eu?
@marcosbrizeno
brizeno.wordpress.com
Como?
O Simples Hello World!
Testes com ExUnit
Pattern Matching com Fibonacci
Tail Recursion com Cálculo Fatorial
O Operador |> (pipe)
Próximos finais de semana
Por que Elixir?
Porque sim Zequinha
Elixir e Erlang
Funcional BR HUE!
Divertida e performática
BEAM VM
Elixir <- Erlang
Hello World!
$> iex
iex(1)> IO.puts("Hello World!")
Hello World!
:ok
$> iex
iex(1)> IO.puts("Hello World!")
Hello World!
:ok
iex(1)> IO.puts("Hello World!")
Módulo IO
Função puts/1
Criando módulos
defmodule HelloWorld do
def hello() do
“Hello World”
end
end
hello_world.exs
defmodule HelloWorld do
def hello() do
“Hello World”
end
end
hello_world.exs
defmodule HelloWorld do
end
Módulo HelloWorld
defmodule HelloWorld do
def hello() do
“Hello World”
end
end
hello_world.exs
def hello() do
“Hello World”
end
Função hello/0
defmodule HelloWorld do
def hello() do
“Hello World”
end
end
hello_world.exs
$> iex
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
"Hello World"
$> iex
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
"Hello World"
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
Carrega arquivo ”hello_world.exs”
Chama função hello/0
Modificando módulos com hot reload
defmodule HelloWorld do
def hello() do
“Hello World”
end
def hello(name) do
“Hello #{name}”
end
end
hello_world.exs
defmodule HelloWorld do
def hello(name) do
“Hello #{name}”
end
end
defmodule HelloWorld do
def hello(name) do
“Hello #{name}”
end
end
hello_world.exs
$> iex
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
"Hello World”
iex(3)> HelloWorld.hello(“Lambda I/O“)
** (UndefinedFunctionError)
$> iex
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
"Hello World”
iex(3)> HelloWorld.hello(“Lambda I/O“)
** (UndefinedFunctionError)
iex(4)> r(HelloWorld)
iex(5)> HelloWorld.hello(“Lambda I/O“)
"Hello Lambda I/O”
$> iex
iex(1)> Code.load_file(“hello_world.exs")
iex(2)> HelloWorld.hello()
"Hello World”
iex(3)> HelloWorld.hello(“Lambda I/O“)
** (UndefinedFunctionError)
iex(4)> r(HelloWorld)
iex(5)> HelloWorld.hello(“Lambda I/O“)
"Hello Lambda I/O”
iex(4)> r(HelloWorld)
iex(5)> HelloWorld.hello(“Lambda I/O“)
"Hello Lambda I/O”
r Recarrega o módulo HelloWorld
Agora podemos acessar hello/1
Testes com ExUnit
defmodule HelloWorld do
def hello() do
“Hello World”
end
def hello(name) do
“Hello #{name}”
end
end
hello_world.exs
hello_world_test.exs
Code.load_file("hello_world.exs")
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
test "returns Hello World" do
assert
HelloWorld.hello == "Hello World"
end
end
$> elixir hello_world_test.exs
.
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
1 test, 0 failures
Anatomia de um caso de test ExUnit
hello_world_test.exs
Code.load_file("hello_world.exs")
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
test "returns Hello World" do
assert
HelloWorld.hello == "Hello World"
end
end
Code.load_file("hello_world.exs")
hello_world_test.exs
Code.load_file("hello_world.exs")
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
test "returns Hello World" do
assert
HelloWorld.hello == "Hello World"
end
end
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
end
hello_world_test.exs
Code.load_file("hello_world.exs")
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
test "returns Hello World" do
assert
HelloWorld.hello == "Hello World"
end
end
test "returns Hello World" do
assert
HelloWorld.hello == "Hello World"
end
Saída em caso de falhas
$> elixir hello_world_test.exs
1) test returns Hello World
(HelloWorldTest)
hello_world_test.exs:8
Assertion with == failed
code: HelloWorld.hello() == "Hello
not World"
left: "Hello World"
right: "Hello not World"
stacktrace:
hello_world_test.exs:9: (test)
Sequência Fibonacci
com Pattern
Matching
fib_test.exs
Code.load_file("fib.exs")
ExUnit.start
defmodule FibonacciTest do
use ExUnit.Case, async: true
test "fibonacci 0 is 0" do
assert Fibonacci.calculate(0) == 0
end
end
fib.exs
defmodule Fibonacci do
def calculate(number) do
0
end
end
$> elixir fib_test.exs
.
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
1 test, 0 failures
fib_test.exs
test "fibonacci 0 is 0" do
assert Fibonacci.calculate(0) == 0
end
test "fibonacci 1 is 1" do
assert Fibonacci.calculate(1) == 1
end
test "fibonacci 2 is 1" do
assert Fibonacci.calculate(2) == 1
end
fib.exs
def calculate(n) do
cond do
n <= 0 -> 0
n == 1 -> 1
true ->
calculate(n-2) + calculate(n-1)
end
end
$> elixir fib_test.exs
...
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
3 test, 0 failures
Utilizando Pattern Matching
fib.exs
def calculate(n) do
case n do
0 -> 0
1 -> 1
_ -> calculate(n-2) + calculate(n-1)
end
end
fib.exs
def calculate(n) do
case n do
0 -> 0
1 -> 1
_ -> calculate(n-2) + calculate(n-1)
end
end
case n do
0
1
_
end
$> elixir fib_test.exs
...
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
3 test, 0 failures
Utilizando Pattern Matching nos argumentos
fib.exs
def calculate(0), do: 0
def calculate(1), do: 1
def calculate(n) do
calculate(n-2) + calculate(n-1)
end
$> elixir fib_test.exs
...
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
3 test, 0 failures
Guard Clause nos métodos
fib_test.exs
test "raise ArgumentError" do
assert_raise ArgumentError, fn ->
Fibonacci.calculate(-1)
end
end
fib.exs
def calculate(0), do: 0
def calculate(1), do: 1
def calculate(n) when n < 0 do
raise ArgumentError
end
def calculate(n) do
calculate(n-2) + calculate(n-1)
end
def calculate(n) when n < 0 do
raise ArgumentError
end
Cálculo Fatorial com
Tail Recursion
factorial_test.exs
Code.load_file("factorial.exs")
ExUnit.start
defmodule FactorialTest do
use ExUnit.Case, async: true
test "factorial of 0 is 1" do
assert Factorial.of(0) == 1
end
end
factorial.exs
defmodule Factorial do
def of(0), do: 1
end
factorial_test.exs
test "factorial of 1 is 1" do
assert Factorial.of(1) == 1
end
factorial.exs
defmodule Factorial do
def of(0), do: 1
def of(n) do
of(n-1) * n
end
end
Otimizando com Tail recursion
factorial_test.exs
test "factorial of 100000" do
assert Factorial.of(100_000)
end
@tag timeout: 600_000
test "factorial of 500000" do
assert Factorial.of(500_000)
end
factorial.exs
defmodule Factorial do
def of(n), do: of(n, 1)
defp of(0, accumulator), do: accumulator
defp of(n, accumulator) do
of(n-1, accumulator*n)
end
end
factorial.exs
defmodule Factorial do
def of(n), do: of(n, 1)
defp of(0, accumulator), do: accumulator
defp of(n, accumulator) do
of(n-1, accumulator*n)
end
end
def of(n), do: of(n, 1)
of/1 of/2
factorial.exs
defmodule Factorial do
def of(n), do: of(n, 1)
defp of(0, accumulator), do: accumulator
defp of(n, accumulator) do
of(n-1, accumulator*n)
end
end
defp of(0, accumulator), do: accumulator
factorial.exs
defmodule Factorial do
def of(n), do: of(n, 1)
defp of(0, accumulator), do: accumulator
defp of(n, accumulator) do
of(n-1, accumulator*n)
end
end
defp of(n, accumulator) do
of(n-1, accumulator*n)
end
$> elixir factorial_test.exs
....
Finished in 254.2 seconds (0.05s on
load, 254.2s on tests)
4 tests, 0 failures
Formando acrônimos
e o operador |> (pipe)
acronym_test.exs
defmodule AcronymTest do
use ExUnit.Case, async: true
test "it produces acronyms from title
case" do
assert Acronym.abbreviate("Portable
Networks Graphic") === "PNG"
end
end
acronym.exs
defmodule Acronym do
def abbreviate(title) do
separated_names =
String.split(title, " ")
capitalized_letters =
capitalize_letters(separated_names)
Enum.join(capitalized_letters)
end
end
acronym.exs
defmodule Acronym do
defp capitalize_letters(names) do
Enum.map(names, fn(name) ->
first_letter = String.first(name)
String.capitalize(first_letter)
end)
end
end
$> elixir acronym.exs
.
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
1 test, 0 failures
Refatorando com o |>
acronym.exs
defp capitalize_letters(names) do
Enum.map(names, fn(name) ->
String.capitalize(String.first(name))
end
end
acronym.exs
defp capitalize_letters(names) do
Enum.map(names, fn(name) ->
String.capitalize(String.first(name))
end
end
String.capitalize(String.first(name))
acronym.exs
defp capitalize_letters(names) do
Enum.map(names, fn(name) ->
String.first(name)
|> String.capitalize()
end
end
acronym.exs
defp capitalize_letters(names) do
Enum.map(names, fn(name) ->
String.first(name)
|> String.capitalize()
end
end
String.first(name)
|> String.capitalize()
$> elixir acronym.exs
.
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
1 test, 0 failures
Refatorando com o |>, de novo
acronym.exs
defmodule Acronym do
def abbreviate(title) do
separated_names =
String.split(title, " ")
capitalized_letters =
capitalize_letters(separated_names)
Enum.join(capitalized_letters)
end
end
acronym.exs
def abbreviate(title) do
String.split(title, " ")
|> capitalize_letters()
|> Enum.join()
end
acronym.exs
def abbreviate(title) do
String.split(title, " ")
|> capitalize_letters()
|> Enum.join()
end
String.split(title, " ")
|> capitalize_letters()
|> Enum.join()
$> elixir acronym.exs
.
Finished in 0.1 seconds (0.1s on load,
0.00s on tests)
1 test, 0 failures
O que mais?
Meu blog (https://brizeno.wordpress.com/tag/
elixir/)
Elixir getting started (http://elixir-lang.org/
getting-started/introduction.html)
Grok Podcast

(http://www.grokpodcast.com/series/elixir/)
Elixir Koans

(https://github.com/dojo-toulouse/elixir-koans)
exercism.io
Próximos passos
Manipulação de listas
Mix
Phoenix web framework
Obrigado!
@marcosbrizeno

More Related Content

What's hot

Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015
Lukas Ruebbelke
 
Tulip
TulipTulip
Down the rabbit hole, profiling in Django
Down the rabbit hole, profiling in DjangoDown the rabbit hole, profiling in Django
Down the rabbit hole, profiling in Django
Remco Wendt
 
Meck
MeckMeck
20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会Hiroki Mizuno
 
05 1 수식과 연산자
05 1 수식과 연산자05 1 수식과 연산자
05 1 수식과 연산자
Changwon National University
 
Es6 hackathon
Es6 hackathonEs6 hackathon
Es6 hackathon
Justin Alexander
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
Sébastien Prunier
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Ryan McGeary
 
Python meetup: coroutines, event loops, and non-blocking I/O
Python meetup: coroutines, event loops, and non-blocking I/OPython meetup: coroutines, event loops, and non-blocking I/O
Python meetup: coroutines, event loops, and non-blocking I/O
Buzzcapture
 
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
Haris Mahmood
 
An Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End DevelopersAn Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End Developers
FITC
 
Reflex - How does it work?
Reflex - How does it work?Reflex - How does it work?
Reflex - How does it work?
Rocco Caputo
 
AngularJS Testing
AngularJS TestingAngularJS Testing
AngularJS Testing
Eyal Vardi
 
Python Coroutines, Present and Future
Python Coroutines, Present and FuturePython Coroutines, Present and Future
Python Coroutines, Present and Future
emptysquare
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка TwistedMaxim Kulsha
 
Dts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlinDts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlin
Ahmad Arif Faizin
 
PyconKR 2018 Deep dive into Coroutine
PyconKR 2018 Deep dive into CoroutinePyconKR 2018 Deep dive into Coroutine
PyconKR 2018 Deep dive into Coroutine
Daehee Kim
 
The Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 SeasonsThe Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 Seasons
Baruch Sadogursky
 

What's hot (20)

Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015
 
Tulip
TulipTulip
Tulip
 
Down the rabbit hole, profiling in Django
Down the rabbit hole, profiling in DjangoDown the rabbit hole, profiling in Django
Down the rabbit hole, profiling in Django
 
Meck
MeckMeck
Meck
 
20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会
 
05 1 수식과 연산자
05 1 수식과 연산자05 1 수식과 연산자
05 1 수식과 연산자
 
Es6 hackathon
Es6 hackathonEs6 hackathon
Es6 hackathon
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Python meetup: coroutines, event loops, and non-blocking I/O
Python meetup: coroutines, event loops, and non-blocking I/OPython meetup: coroutines, event loops, and non-blocking I/O
Python meetup: coroutines, event loops, and non-blocking I/O
 
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
 
An Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End DevelopersAn Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End Developers
 
Reflex - How does it work?
Reflex - How does it work?Reflex - How does it work?
Reflex - How does it work?
 
AngularJS Testing
AngularJS TestingAngularJS Testing
AngularJS Testing
 
Ruby 1.9
Ruby 1.9Ruby 1.9
Ruby 1.9
 
Python Coroutines, Present and Future
Python Coroutines, Present and FuturePython Coroutines, Present and Future
Python Coroutines, Present and Future
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка Twisted
 
Dts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlinDts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlin
 
PyconKR 2018 Deep dive into Coroutine
PyconKR 2018 Deep dive into CoroutinePyconKR 2018 Deep dive into Coroutine
PyconKR 2018 Deep dive into Coroutine
 
The Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 SeasonsThe Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 Seasons
 

Viewers also liked

Kumano Kodo
Kumano KodoKumano Kodo
Kumano Kodo
Dimos Derventlis
 
La rinconada12mar17m ldealfonsorodriguezvera[1]
La rinconada12mar17m ldealfonsorodriguezvera[1]La rinconada12mar17m ldealfonsorodriguezvera[1]
La rinconada12mar17m ldealfonsorodriguezvera[1]
Winston1968
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de Datos
Javier Vélez Reyes
 
Bloating, Constipation, 'Gastric' - When should I be worried?
Bloating, Constipation, 'Gastric' - When should I be worried?Bloating, Constipation, 'Gastric' - When should I be worried?
Bloating, Constipation, 'Gastric' - When should I be worried?
Jarrod Lee
 
328 lsb-oficial(1)
328 lsb-oficial(1)328 lsb-oficial(1)
328 lsb-oficial(1)
sleven00
 
7.soluciones?
7.soluciones?7.soluciones?
7.soluciones?
Alejandroauringis
 
Workshop 6
Workshop 6Workshop 6
Workshop 6
Haris Evaggelou
 
3Com 3CRWE9152A75
3Com 3CRWE9152A753Com 3CRWE9152A75
3Com 3CRWE9152A75
savomir
 
Ps edits Lydia Rosado
Ps edits Lydia RosadoPs edits Lydia Rosado
Ps edits Lydia Rosado
AS Media Column D
 
Task 2
Task 2Task 2
Task 2
HaizadKamal
 
MMostafa Develop Mobile Application For Oracle EBS
MMostafa Develop Mobile Application For Oracle EBSMMostafa Develop Mobile Application For Oracle EBS
MMostafa Develop Mobile Application For Oracle EBS
Mohamed Mostafa
 
Seminar on stress ribbon bridge by naveen prakash(2)
Seminar on stress ribbon bridge by naveen prakash(2)Seminar on stress ribbon bridge by naveen prakash(2)
Seminar on stress ribbon bridge by naveen prakash(2)
NAVEEN PRAKASH
 
The Most Famous Irishman Who Never Was
The Most Famous Irishman Who Never WasThe Most Famous Irishman Who Never Was
The Most Famous Irishman Who Never Was
Franklin Matters
 
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκια
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκιαAυτός που αγαπώ έχει δύο ρόδινα αυτάκια
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκια
Γιώργος Γαμβρινός
 
Debates em Psiquiatria
Debates em PsiquiatriaDebates em Psiquiatria
Debates em Psiquiatria
Fabricio Batistoni
 
LODを誰でも簡単に「Simple LODI」
LODを誰でも簡単に「Simple LODI」LODを誰でも簡単に「Simple LODI」
LODを誰でも簡単に「Simple LODI」
uedayou
 
Cardekho
CardekhoCardekho
Cardekho
DILSHAD C P
 
Who is Jesus?
Who is Jesus?Who is Jesus?
Who is Jesus?
canleychurch
 

Viewers also liked (18)

Kumano Kodo
Kumano KodoKumano Kodo
Kumano Kodo
 
La rinconada12mar17m ldealfonsorodriguezvera[1]
La rinconada12mar17m ldealfonsorodriguezvera[1]La rinconada12mar17m ldealfonsorodriguezvera[1]
La rinconada12mar17m ldealfonsorodriguezvera[1]
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de Datos
 
Bloating, Constipation, 'Gastric' - When should I be worried?
Bloating, Constipation, 'Gastric' - When should I be worried?Bloating, Constipation, 'Gastric' - When should I be worried?
Bloating, Constipation, 'Gastric' - When should I be worried?
 
328 lsb-oficial(1)
328 lsb-oficial(1)328 lsb-oficial(1)
328 lsb-oficial(1)
 
7.soluciones?
7.soluciones?7.soluciones?
7.soluciones?
 
Workshop 6
Workshop 6Workshop 6
Workshop 6
 
3Com 3CRWE9152A75
3Com 3CRWE9152A753Com 3CRWE9152A75
3Com 3CRWE9152A75
 
Ps edits Lydia Rosado
Ps edits Lydia RosadoPs edits Lydia Rosado
Ps edits Lydia Rosado
 
Task 2
Task 2Task 2
Task 2
 
MMostafa Develop Mobile Application For Oracle EBS
MMostafa Develop Mobile Application For Oracle EBSMMostafa Develop Mobile Application For Oracle EBS
MMostafa Develop Mobile Application For Oracle EBS
 
Seminar on stress ribbon bridge by naveen prakash(2)
Seminar on stress ribbon bridge by naveen prakash(2)Seminar on stress ribbon bridge by naveen prakash(2)
Seminar on stress ribbon bridge by naveen prakash(2)
 
The Most Famous Irishman Who Never Was
The Most Famous Irishman Who Never WasThe Most Famous Irishman Who Never Was
The Most Famous Irishman Who Never Was
 
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκια
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκιαAυτός που αγαπώ έχει δύο ρόδινα αυτάκια
Aυτός που αγαπώ έχει δύο ρόδινα αυτάκια
 
Debates em Psiquiatria
Debates em PsiquiatriaDebates em Psiquiatria
Debates em Psiquiatria
 
LODを誰でも簡単に「Simple LODI」
LODを誰でも簡単に「Simple LODI」LODを誰でも簡単に「Simple LODI」
LODを誰でも簡単に「Simple LODI」
 
Cardekho
CardekhoCardekho
Cardekho
 
Who is Jesus?
Who is Jesus?Who is Jesus?
Who is Jesus?
 

Similar to Aprenda Elixir em um final de semana

Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Cox
lachie
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Scott Leberknight
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
Laura M. Castro
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the pointseanmcq
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
Pivorak MeetUp
 
Pocket Talk; Spock framework
Pocket Talk; Spock frameworkPocket Talk; Spock framework
Pocket Talk; Spock framework
Infoway
 
Spock framework
Spock frameworkSpock framework
Spock framework
Djair Carvalho
 
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on RailsSEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Fabio Akita
 
Specs2
Specs2Specs2
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
The report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyThe report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyYasuharu Nakano
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert Fornal
QA or the Highway
 
Slides chapter3part1 ruby-forjavaprogrammers
Slides chapter3part1 ruby-forjavaprogrammersSlides chapter3part1 ruby-forjavaprogrammers
Slides chapter3part1 ruby-forjavaprogrammersGiovanni924
 
Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
Sarah Allen
 
Elixir @ Paris.rb
Elixir @ Paris.rbElixir @ Paris.rb
Elixir @ Paris.rb
Gregoire Lejeune
 
JavaScript 1 for high school
JavaScript 1 for high schoolJavaScript 1 for high school
JavaScript 1 for high school
jekkilekki
 
Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsLeonardo Borges
 
Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)
Rick Copeland
 
Elixir cheatsheet
Elixir cheatsheetElixir cheatsheet
Elixir cheatsheet
Héla Ben Khalfallah
 

Similar to Aprenda Elixir em um final de semana (20)

Ruby
RubyRuby
Ruby
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Cox
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the point
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
 
Pocket Talk; Spock framework
Pocket Talk; Spock frameworkPocket Talk; Spock framework
Pocket Talk; Spock framework
 
Spock framework
Spock frameworkSpock framework
Spock framework
 
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on RailsSEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
 
Specs2
Specs2Specs2
Specs2
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
The report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyThe report of JavaOne2011 about groovy
The report of JavaOne2011 about groovy
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert Fornal
 
Slides chapter3part1 ruby-forjavaprogrammers
Slides chapter3part1 ruby-forjavaprogrammersSlides chapter3part1 ruby-forjavaprogrammers
Slides chapter3part1 ruby-forjavaprogrammers
 
Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
 
Elixir @ Paris.rb
Elixir @ Paris.rbElixir @ Paris.rb
Elixir @ Paris.rb
 
JavaScript 1 for high school
JavaScript 1 for high schoolJavaScript 1 for high school
JavaScript 1 for high school
 
Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event Systems
 
Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)
 
Elixir cheatsheet
Elixir cheatsheetElixir cheatsheet
Elixir cheatsheet
 

More from Marcos Brizeno

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
Marcos Brizeno
 
GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017
Marcos Brizeno
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação Digital
Marcos Brizeno
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviços
Marcos Brizeno
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bom
Marcos Brizeno
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimados
Marcos Brizeno
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com Código
Marcos Brizeno
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis Distribuidas
Marcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
Marcos Brizeno
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em Ruby
Marcos Brizeno
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos Ganham
Marcos Brizeno
 
Dubles de teste
Dubles de testeDubles de teste
Dubles de teste
Marcos Brizeno
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?
Marcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
Marcos Brizeno
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls Fortaleza
Marcos Brizeno
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação Ruby
Marcos Brizeno
 
Arquitetura Ágil
Arquitetura ÁgilArquitetura Ágil
Arquitetura Ágil
Marcos Brizeno
 
Clean code
Clean codeClean code
Clean code
Marcos Brizeno
 

More from Marcos Brizeno (18)

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
 
GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação Digital
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviços
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bom
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimados
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com Código
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis Distribuidas
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em Ruby
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos Ganham
 
Dubles de teste
Dubles de testeDubles de teste
Dubles de teste
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls Fortaleza
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação Ruby
 
Arquitetura Ágil
Arquitetura ÁgilArquitetura Ágil
Arquitetura Ágil
 
Clean code
Clean codeClean code
Clean code
 

Recently uploaded

From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 

Recently uploaded (20)

From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 

Aprenda Elixir em um final de semana