Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Introduction to Elixir
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Sheharyar Naseer
February 27, 2016
Programming
1.8k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Elixir
My talk on Elixir that I delivered at IslamabadJS.
Sheharyar Naseer
February 27, 2016
More Decks by Sheharyar Naseer
See All by Sheharyar Naseer
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
350
Scaling AI Applications with Kubernetes
sheharyar
1
270
AI Seekho - Google Cloud Study Jam 2025
sheharyar
0
490
Thinking in Environments with Docker
sheharyar
0
390
FLAME - Better Serverless Architecture with Kubernetes
sheharyar
1
460
Supercharging Development with Docker
sheharyar
0
630
Using Docker for your Applications
sheharyar
1
570
Building LLM Apps with Google Vertex AI and PaLM
sheharyar
0
750
Cloud Basics: Google App Engine
sheharyar
0
590
Other Decks in Programming
See All in Programming
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.4k
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
290
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
210
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
170
golang-bob.pdf
iwatsukayura
0
150
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
120
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
200
Next.js: The final boss of Web Performance
guaca
0
350
APNsからLive Activityを開始する話
yumnumm
0
180
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
200
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
10k
phperだってパンチカードでコーディングしたい
o0h
PRO
0
480
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Being A Developer After 40
akosma
PRO
92
590k
ラッコキーワード サービス紹介資料
rakko
5
5.5M
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
490
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
590
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Making Projects Easy
brettharned
120
6.8k
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]