Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir – Belarus Ruby User Group 25 Jan 2014
Search
Sergey Nartimov
January 25, 2014
Programming
3
640
Elixir – Belarus Ruby User Group 25 Jan 2014
Sergey Nartimov
January 25, 2014
Tweet
Share
More Decks by Sergey Nartimov
See All by Sergey Nartimov
PubSub at Rails
lest
0
110
Rails in production - RubyConfBY 22 Mar 2015
lest
1
130
Sequel - BRUG 21 Feb 2015
lest
0
71
Authentication Security – RUBYSPB
lest
2
140
Geospatial applications on Rails
lest
8
370
Design patterns – Belarus Ruby on Rails User Group 23 Feb 2013
lest
8
640
Ruby Stdlib – Minsk.rb October 2012
lest
10
330
Background jobs with realtime results – RailsClub'Moscow 2012
lest
5
210
Other Decks in Programming
See All in Programming
Criando a Woovi em uma semana
daniloab
0
120
Next.js App Router
quramy
14
2.3k
RubyGems on ruby.wasm
kateinoigakukun
0
120
CQRS meets modern Java
simas
PRO
2
480
『WordPressコミュニティで学ぶ』OSS貢献の多様性
ippey
0
260
教えて!スクラムコーチ品質とスピードのバランスはどうすりゃいいの?
pinboro
0
120
Sheets API使ってみた
toshi0383
2
180
Balkan Ruby 2024 — How and why to run SQLite on Rails in production
fractaledmind
0
110
哲学史とモデリング
tanakahisateru
2
430
The grand strategy of Ruby Parser
yui_knk
5
310
TSKaigi 2024 - 新サービス Progate Path の演習で TypeScript を採用して見えた教材観点からの利点と課題
makotoshimazu
1
220
otelcol receiver 自作RTA / Pepabo Tech Conference #22 春のSREまつり
arthur1
0
980
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
8
3.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Side Projects
sachag
451
41k
Infographics Made Easy
chrislema
238
18k
A Tale of Four Properties
chriscoyier
153
22k
Being A Developer After 40
akosma
67
580k
GitHub's CSS Performance
jonrohan
1025
450k
Happy Clients
brianwarren
92
6.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
Mobile First: as difficult as doing things right
swwweet
217
8.6k
The Invisible Customer
myddelton
114
12k
Transcript
Elixir Сергей Нартымов Brainspec https://github.com/lest twitter: @just_lest
Elixir is a metaprogrammable, functional language built atop the Erlang
VM.
Elixir
Metaprogramming
Metaprogramming iex> nil?(1) false iex> nil?(nil) true defmacro nil?(x) do
quote do: unquote(x) == nil end
Metaprogramming iex> nil?(1) false iex> nil?(nil) true defmacro nil?(x) do
quote do: unquote(x) == nil end
Metaprogramming if(foo, do: bar, else: baz) if foo do bar
else baz end
Metaprogramming defmacro unless(clause, options) do do_clause = Keyword.get(options, :do, nil)
else_clause = Keyword.get(options, :else, nil) quote do if(unquote(clause), do: unquote(else_clause), else: unquote(do_clause)) end end
Metaprogramming Lisps traditionally empowered developers because you can eliminate anything
that’s tedious through macros, and that power is really what people keep going back for. — Rich Hickey
Functions
Function capture iex> list = ["foo", "bar", "baz"] ["foo","bar","baz"] iex>
Enum.map list, fn(x) -> size(x) end [3,3,3] iex> Enum.map list, &size/1 [3,3,3] iex> fun = &rem(&1, 2) #Function<6.80484245 in :erl_eval.expr/5> iex> fun.(4) 0
Function capture iex> list = ["foo", "bar", "baz"] ["foo","bar","baz"] iex>
Enum.map list, fn(x) -> size(x) end [3,3,3] iex> Enum.map list, &size/1 [3,3,3] iex> fun = &rem(&1, 2) #Function<6.80484245 in :erl_eval.expr/5> iex> fun.(4) 0
Partial application iex> list = ["foo", "bar", "baz"] ["foo","bar","baz"] iex>
Enum.map list, fn(x) -> size(x) end [3,3,3] iex> Enum.map list, &size/1 [3,3,3] iex> fun = &rem(&1, 2) #Function<6.80484245 in :erl_eval.expr/5> iex> fun.(4) 0
Pipeline operator
f3(f2(f1(state))) state |> f1 |> f2 |> f3
f3(f2(f1(state))) state |> f1 |> f2 |> f3
list |> Enum.filter(&(&1 > 0)) # take positive numbers |>
Enum.map(&(&1 * &1)) # square each one |> Enum.reduce(0, &(&1 + &2)) # calculate sum
Polymorphism
Protocols
Protocols defprotocol Inspect do def inspect(thing, opts) end defimpl Inspect,
for: Atom do def inspect(false), do: "false" def inspect(true), do: "true" def inspect(nil), do: "nil" def inspect(atom) do # ... end end
Protocols defimpl Inspect, for: List do # ... end defimpl
Inspect, for: Integer do # ... end
ExUnit A unit test framework
ExUnit ExUnit.start defmodule MyTest do use ExUnit.Case test "the truth"
do assert true end end $ elixir assertion_test.exs
ExUnit ExUnit.start defmodule MyTest do use ExUnit.Case test "the truth"
do assert true end end $ elixir assertion_test.exs
ExUnit assert 1 + 1 == 2 refute 1 +
3 == 3 assert 1 + 1 == 3 # Expected 2 to be equal to (==) 3
Mix A build tool
Mix defmodule MyProject.Mixfile do use Mix.Project def project do [
app: :my_project, version: "0.0.1", deps: deps ] end # Configuration for the OTP application def application do [] end defp deps do [] end end
Mix defp deps do [ { :some_project, github: "some_project/other", tag:
"0.3.0" }, { :another_project, ">= 1.0.2", git: "https://example.com/another/repo.git" } ] end
Other
Other • Unicode strings
Other • Unicode strings • String sigils, heredocs
Other • Unicode strings • String sigils, heredocs • Documentation
Other • Unicode strings • String sigils, heredocs • Documentation
• List comprehentions
Resources • http://elixir-lang.org/ • http://joearms.github.io/2013/05/31/a-week- with-elixir.html • http://www.theerlangelist.com/2014/01/ why-elixir.html •
http://devintorr.es/blog/2013/06/11/elixir- its-not-about-syntax/
Спасибо https://github.com/lest twitter: @just_lest Сергей Нартымов Brainspec