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
670
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elixir – Belarus Ruby User Group 25 Jan 2014
Sergey Nartimov
January 25, 2014
More Decks by Sergey Nartimov
See All by Sergey Nartimov
PubSub at Rails
lest
0
140
Rails in production - RubyConfBY 22 Mar 2015
lest
1
160
Sequel - BRUG 21 Feb 2015
lest
0
100
Authentication Security – RUBYSPB
lest
2
200
Geospatial applications on Rails
lest
8
440
Design patterns – Belarus Ruby on Rails User Group 23 Feb 2013
lest
8
670
Ruby Stdlib – Minsk.rb October 2012
lest
10
420
Background jobs with realtime results – RailsClub'Moscow 2012
lest
5
230
Other Decks in Programming
See All in Programming
Google Apps Script で Ruby を動かす
kawahara
0
270
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
390
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
520
FDEが実現するAI駆動経営の現在地
gonta
2
290
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
160
AIを紡ぐPMのお話
swdtkuy
0
110
AIが無かった頃の素敵な出会いの話
codmoninc
1
460
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.8k
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
190
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
270
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
290
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
280
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
So, you think you're a good person
axbom
PRO
2
2.1k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Fireside Chat
paigeccino
42
4k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
540
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
770
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
470
Designing Experiences People Love
moore
143
24k
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