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
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
340
Scaling AI Applications with Kubernetes
sheharyar
1
270
AI Seekho - Google Cloud Study Jam 2025
sheharyar
0
480
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
740
Cloud Basics: Google App Engine
sheharyar
0
590
Other Decks in Programming
See All in Programming
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
370
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
140
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.6k
sbt 2.0: takeoff
eed3si9n
0
120
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
320
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
130
パーソナライズPodcastを作った話
repunit11
0
130
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
690
すこし踏み込む CancellationToken
htkym
2
1.7k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Site-Speed That Sticks
csswizardry
13
1.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
The Curious Case for Waylosing
cassininazir
1
560
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
400
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
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]