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
Introduction to Elixir
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sheharyar Naseer
February 27, 2016
Programming
3
1.7k
Introduction to Elixir
My talk on Elixir that I delivered at IslamabadJS.
Sheharyar Naseer
February 27, 2016
Tweet
Share
More Decks by Sheharyar Naseer
See All by Sheharyar Naseer
Scaling AI Applications with Kubernetes
sheharyar
1
110
AI Seekho - Google Cloud Study Jam 2025
sheharyar
0
320
Thinking in Environments with Docker
sheharyar
0
250
FLAME - Better Serverless Architecture with Kubernetes
sheharyar
1
340
Supercharging Development with Docker
sheharyar
0
490
Using Docker for your Applications
sheharyar
1
400
Building LLM Apps with Google Vertex AI and PaLM
sheharyar
0
580
Cloud Basics: Google App Engine
sheharyar
0
470
Docker on Google Cloud
sheharyar
0
740
Other Decks in Programming
See All in Programming
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
AtCoder Conference 2025
shindannin
0
1.1k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
450
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
270
「ブロックテーマでは再現できない」は本当か?
inc2734
0
950
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
940
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
Data-Centric Kaggle
isax1015
2
770
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
RailsConf 2023
tenderlove
30
1.3k
A designer walks into a library…
pauljervisheath
210
24k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
99
Paper Plane (Part 1)
katiecoart
PRO
0
4.1k
Navigating Team Friction
lara
192
16k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Thoughts on Productivity
jonyablonski
74
5k
Building the Perfect Custom Keyboard
takai
2
680
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
So, you think you're a good person
axbom
PRO
2
1.9k
GitHub's CSS Performance
jonrohan
1032
470k
Transcript
ELIXIR INTRODUCTION TO
SHEHARYAR NASEER sheharyarn
STORY TIME
- Rails is Immensely Popular - Developer productivity is through
the roof - But has concurrency issues - José Valim to make it threadsafe BACK IN THE DAY
- Can never fully guarantee it - Looked towards Functional
Languages - Erlang! THREADSAFE RAILS
- Fast and Powerful - Immutable - Fault-tolerant - Concurrent
and Distributed ERLANG-LOVE
JOSÉ VALIM I liked everything I saw in Erlang, but
hated the things I didn’t see “
- Awful Syntax - Lack of Metaprogramming - No Polymorphism
- No proper build tools ERLANG-HATE
Decided to build his own language on the ERLANG VM
ELIXIR IS BORN
ELIXIR-LANG.COM A dynamic, functional language designed for building scalable and
maintainable applications “
$ brew install elixir $ iex iex> IO.puts "hello world!"
hello world! GETTING STARTED
iex> 99 # integer iex> 4.2 # float iex> true
# boolean iex> :atom # atom iex> "i ♥ elixir" # string iex> [1, 2, 3] # list iex> {4, 5, 6} # tuple BASIC TYPES
iex> 10 + 3 => 13 iex> 10 / 5
=> 2.0 iex> "hello" <> " world" => "hello world" iex> "num: #{4 * 5}" => "num: 20" iex> true and false => false iex> nil || :something => :something iex> [1, 2, 3] ++ [4, 5] => [1, 2, 3, 4, 5] iex> [1, 2, 3] —- [2] => [1, 3] BASIC OPERATORS
iex> double = fn x -> x * 2 end
iex> double.(7) 14 iex> Enum.map [1,2,3,4,5], double [2, 4, 6, 8, 10] HIGHER ORDER FUNCTIONS
iex> person = %{name: "Sheharyar", occupation: :developer} iex> person.name #
=> "Sheharyar" iex> person[:occupation] # => :developer iex> person[:other] # => nil iex> person.other # => ** (KeyError) key :other not found MAPS & KEYWORD LISTS
iex> keywords = [{:a, 1}, {:b, 2}, {:c, 3}] [a:
1, b: 2, c: 3] iex> keywords[:b] 2 iex> keywords = [a: 1, b: 2, a: :something_else] [a: 1, b: 2, a: :something_else] MAPS & KEYWORD LISTS
iex> my_list = [1, 2, 3, 4, 5] iex> List.delete(my_list,
4) [1, 2, 3, 5] iex> my_list [1, 2, 3, 4, 5] IMMUTABILITY
iex> my_list = [1, 2, 3, 4, 5] iex> my_list
= List.delete(my_list, 4) [1, 2, 3, 5] iex> my_list [1, 2, 3, 5] IMMUTABILITY
iex> x = 10 10 iex> 10 = x 10
PATTERN MATCHING
iex> x = 10 10 iex> 10 = x 10
iex> 20 = x ** (MatchError) no match of right hand side value: 10 PATTERN MATCHING
iex> {a, b, c} = {"horror", :friday, 13} iex> a
# => "horror" iex> b # => :friday iex> c # => 13 PATTERN MATCHING
some_data = [:fire, {32, 45, 73}, %{name: "Foo", desc: "Bar"}]
iex> [_, {a, b, _}, %{name: name}] = some_data iex> a # => 32 iex> b # => 45 iex> name # => "Foo" iex> _ # => ** (CompileError) iex: unbound variable _ PATTERN MATCHING
some_data = [:fire, {32, 45, 73}, %{name: "Foo", desc: "Bar"}]
iex> [:water, {a, b, _}, %{name: name}] = some_data ** (MatchError) no match of right hand side value PATTERN MATCHING
result = Directory.read_filenames() case result do {:ok, files} -> Enum.map(files,
&IO.puts/1) {:error, message} -> IO.puts "Can't read files: #{message}" end PATTERN MATCHING
defmodule Area do def rectangle(l, w) do l * w
end end iex> Area.rectangle(2, 3) 6 MODULES
defmodule Area do def rectangle(l, w), do: l * w
def square(l), do: rectangle(l, l) def circle(r), do: 3.14 * square(r) end Area.square(4) # => 16 Area.circle(5) # => 78.5 MODULES
iex> circle_radii = [1, 2, 3] iex> Enum.map circle_radii, fn
r -> Area.circle(r) end [3.14, 12.56, 28.26] CAPTURE OPERATOR
iex> circle_radii = [1, 2, 3] iex> Enum.map circle_radii, fn
r -> Area.circle(r) end [3.14, 12.56, 28.26] iex> Enum.map circle_radii, &Area.circle/1 [3.14, 12.56, 28.26] CAPTURE OPERATOR
defmodule Rectangle do defstruct [:length, :width] def area(rect), do: rect.length
* rect.width end iex> rect = %Rectangle{length: 10, width: 5} iex> Rectangle.area(rect) 50 STRUCTS
# Double, reverse and then print items in a list
my_list = [1, 2, 3, 4, 5] doubled_list = Enum.map(my_list, fn x -> x * 2 end) reverse_list = Enum.reverse(doubled_list) Enum.map(reverse_list, &IO.puts/1) PIPE OPERATOR
# Double, reverse and then print items in a list
Enum.map( Enum.reverse( Enum.map([1, 2, 3, 4, 5], fn x -> x * 2 end) ), &IO.puts/1 ) PIPE OPERATOR
# Double, reverse and then print items in a list
[1, 2, 3, 4, 5] |> Enum.map(fn x -> x*2 end) |> Enum.reverse |> Enum.map(&IO.puts/1) PIPE OPERATOR
defprotocol JSON do def encode(item) end POLYMORPHISM defimpl JSON, for:
String do def encode(s), do: "\"#{s}\"" end defimpl JSON, for: CustomModule do def encode(item) do # do something end end
METAPROGRAMMING - via Macros - Elixir is written in Elixir!
- Almost everything is a Macro def, defmodule, if-else, and, or, !, |>, and so much more
defmacro macro_unless(clause, expression) do quote do if(!unquote(clause), do: unquote(expression)) end
end METAPROGRAMMING
$ mix new my_app $ mix deps.get $ mix test
$ mix run $ iex -S mix MIX
THE FUTURE
- Growing at an amazing rate - Backed by major
players from Rails, Erlang & Node.js communities - Erlang libraries at disposal COMMUNITY
- Elixir’s Rails - Super-fast and developer-friendly - Requests completed
in microseconds (µs) - Tons of guides and resources already available PHOENIX FRAMEWORK
- PHP with Open Source - Rails with Developer Productivity
- Elixir with Performance (without sacrificing developer happiness) THE NEXT REVOLUTION
- Official Website (elixir-lang.com) - Awesome Books - Elixir in
Action - Programming Elixir - Screencasts - Elixir Sips (elixirsips.com) - Learn Elixir (learnelixir.tv) RESOURCES
QUESTIONS? sheharyarn
[email protected]