Elixir @ Paris.rb

Post on 22-Jun-2015

438 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Short Elixir presentation

Transcript

E!lang Elixir|>

Elixir

José Valim - co-fondateur de Plataformatec(http://plataformatec.com.br)

Proposer la puissance de la machine virtuelle E!lang d’une manière différente aux développeurs.

Premier commit date de janvier 2011Version actuelle : 0.10.2 / 0.10.3-devRelease finale est prévue pour juin 2014

E!lang : wget http://www.erlang.org/download/otp_src_R16B02.tar.gztar zxf otp_src_R16B02.tar.gzcd otp_src_R16B02./configuremakesudo make install

Elixir :git clone https://github.com/elixir-lang/elixir.gitcd elixirmakesudo make install

Les variablesE!lang :

• /^(?:_[a-zA-Z0-9_]|[A-Z])[a-zA-Z0-9_]*$/

• single assignment

Elixir :

• /^(?:_[a-zA-Z0-9_]|[a-z])[a-zA-Z0-9_]*$/

• re assignment

E!lang :1> A = [1, 2, 3].

[1, 2, 3]

2> A = [4, 5, 6].

** exception error: no match of right hand side value [4,5,6]

Elixir :iex(1)> a = [1, 2, 3]

[1, 2, 3]

iex(2)> a = [4, 5, 6]

[4, 5, 6]

Les variables

iex(1)> a = [1, 2, 3]

[1, 2, 3]

iex(2)> [b, c, d] = a

[1, 2, 3]

iex(3)> b

1

iex(4)> c

2

iex(4)> d

3

iex(1)> a = [1, 2, 3][1, 2, 3]iex(2)> [b | tail] = a[1, 2, 3]iex(3)> b1iex(4)> tail[2, 3]

atomes:an_atom

:"an atom!"

booléenstruefalse

listes [104,101,108,108,111] = ‘hello’

tuples {1, :tuple, ‘de’, "données"}

fonctionsmy_fun = fn(x) -> x*x end

my_fun.(3)

regex %r/erlang|elixir/

range [1..10]

hash[key1: "value1", key2: 3, ...][{"Une clé", "sa valeur»}, ...]

Les binaires : séquence d’entiers (0-255 / 8 bits) placée entre << et >>

Les binaires : séquence d’entiers (0-255 / 8 bits) placée entre << et >>

<<104, 101, 108, 108, 111>>

Les binaires : séquence d’entiers (0-255 / 8 bits) placée entre << et >>

<<[104, 101, 108, 108, 111]>>

<<104, 101, 108, 108, 111>>

Les binaires : séquence d’entiers (0-255 / 8 bits) placée entre << et >>

<<[104, 101, 108, 108, 111]>>

<<'hello'>>

<<104, 101, 108, 108, 111>>

Les binaires : séquence d’entiers (0-255 / 8 bits) placée entre << et >>

<<[104, 101, 108, 108, 111]>>

<<'hello'>>

"hello"

<<104, 101, 108, 108, 111>>

<<259>> = ?

<<259>> = <<3>>

<<259>> = <<3>>

<<259:size(16)>> = <<1, 3>>

<<259>> = <<3>>

<<259:size(16)>> = <<1, 3>>

<<x:size(16)>> = <<1, 3>>

<<2.4>>

<<2.4>>** (ArgumentError) argument error :erl_eval.expr/3

<<2.4>>

<<2.4:float>> = <<64, 3, 51, 51, 51, 51, 51, 51>>

** (ArgumentError) argument error :erl_eval.expr/3

<<2.4>>

<<2.4:float>> = <<64, 3, 51, 51, 51, 51, 51, 51>>

** (ArgumentError) argument error :erl_eval.expr/3

les flottants sont codés sur 64 bits ; le premier bit pour coder le signe, les 11 suivants pour l’exposant, puis 52 bits pour la mantisse et le dernier, implicite.

binary, bits, bitstring, bytes, float, integer, utf8, utf16, utf32

signed, unsigned

iex(1)> <<f::float, i::[size(32), signed]>> = <<64, 6, 102, 102, 102, 102, 102, 102, 255, 255, 254, 195>><<64, 6, 102, 102, 102, 102, 102, 102, 255, 255, 254, 195>>iex(2)> f2.8iex(3)> i-317

defmodule Test do def circle(t) do [x|tail] = t tail ++ [x] endend

Test.circle [1, 2, 3]# => [2, 3, 1]

defmodule Test do def circle(t) do [x|tail] = t tail ++ [x] endend

Test.circle "123"** (MatchError) no match of right hand side value: "123"

defmodule Test do def circle(t) when is_list(t) do [x|tail] = t tail ++ [x] endend

Test.circle [1, 2, 3]# => [2, 3, 1]

defmodule Test do def circle(t) when is_list(t) do [x|tail] = t tail ++ [x] endend

Test.circle "123"** (FunctionClauseError) no function clause matching in Test.circle/1

defmodule Test do def circle([x|tail]) do

tail ++ [x] endend

Test.circle [1, 2, 3]# => [2, 3, 1]

defmodule Test do def circle([x|tail]) do

tail ++ [x] endend

Test.circle "123"** (FunctionClauseError) no function clause matching in Test.circle/1

defprotocol Test do def circle(l)end

defprotocol Test do def circle(l)end

defimpl Test, for: List do def circle(l) do [x|tail] = l tail ++ [x] endend

defprotocol Test do def circle(l)end

defimpl Test, for: List do def circle(l) do [x|tail] = l tail ++ [x] endend

Test.circle([1, 2, 3])#=> [2, 3, 1]

Test.circle("123")** (UndefinedFunctionError) undefined function: Test.BitString.circle/1

Test.circle("123")** (UndefinedFunctionError) undefined function: Test.BitString.circle/1

defimpl Test, for: BitString do def circle(l) do [x|tail] = String.to_char_list!(l) list_to_bitstring(tail ++ [x]) endend

Test.circle("123")** (UndefinedFunctionError) undefined function: Test.BitString.circle/1

defimpl Test, for: BitString do def circle(l) do [x|tail] = String.to_char_list!(l) list_to_bitstring(tail ++ [x]) endend

Test.circle("123")#=> "231"

defmodule Test do defmacro times(n, body) do quote do: Enum.each( 1..unquote(n), fn(_) -> unquote(body) end ) endend

require TestTest.times(10) do IO.puts "hello"end# => hello 10 times

P!ocessdefmodule Math do def sum do receive do {:sum, a, b} -> IO.puts "#{a} + #{b} = #{a+b}" sum() _ -> IO.puts "not implemented!" end endend

pid = spawn(fn -> Math.sum end)pid <- {:sum, 4, 7}# => 4 + 7 = 11pid <- {:mult, 4, 7}# => not implemented!

|>

x = [1, 2, 3, 4]x = Enum.filter(x, fn(e) -> rem(e, 2) == 0 end)x = Enum.reduce(x, 0, fn(e, r) -> e + r end)

|>

x = [1, 2, 3, 4]x = Enum.filter(x, fn(e) -> rem(e, 2) == 0 end)x = Enum.reduce(x, 0, fn(e, r) -> e + r end)

x = [1, 2, 3, 4]|> Enum.filter(fn(e) -> rem(e, 2) == 0 end)|> Enum.reduce(0, fn(e, r) -> e + r end)

|>

x = [1, 2, 3, 4]x = Enum.filter(x, fn(e) -> rem(e, 2) == 0 end)x = Enum.reduce(x, 0, fn(e, r) -> e + r end)

x = [1, 2, 3, 4]|> Enum.filter(fn(e) -> rem(e, 2) == 0 end)|> Enum.reduce(0, fn(e, r) -> e + r end)

x = [1, 2, 3, 4]|> Enum.filter(&(rem(&1, 2) == 0))|> Enum.reduce(0, &(&1 + &2))

Mix

mix new my_appcd my_appmix deps.getmix compilemix test

Web

• cowboy : http://ninenines.eu

• dynamo : https://github.com/elixir-lang/dynamo

• weber : http://0xax.github.io/weber/

top related