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
OOP in Elixir
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Wojtek Mach
February 17, 2016
320
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OOP in Elixir
Wojtek Mach
February 17, 2016
More Decks by Wojtek Mach
See All by Wojtek Mach
Writing an Ecto Adapter: Introducing MyXQL
wojtekmach
1
170
Hex Core
wojtekmach
0
170
Recurrences & Intervals
wojtekmach
2
510
Building an Umbrella Project
wojtekmach
21
6.1k
Advanced OOP in Elixir
wojtekmach
6
680
Pattern Matching
wojtekmach
1
330
Formatting ruby code
wojtekmach
0
140
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
For a Future-Friendly Web
brad_frost
183
10k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
The Spectacular Lies of Maps
axbom
PRO
1
910
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
エンジニアに許された特別な時間の終わり
watany
108
250k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Into the Great Unknown - MozCon
thekraken
41
2.7k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
Transcript
OOP in Elixir Wojtek Mach
defmodule Person do defstruct [:name] end joe = %Person{name: "Joe"}
robert = %Person{name: "Robert"} joe.name # => "Joe" robert.name # => "Robert"
defmodule Person do defstruct [:name] def say_hello_to(from, to) do IO.puts("#{from.name}:
Hello, #{to.name}") end end joe = %Person{name: "Joe"} robert = %Person{name: "Robert"} joe.name # => "Joe" robert.name # => "Robert" Person.say_hello_to(joe, robert) # => Joe: Hello, Robert
None
import OOP
import OOP class Person do var :name end
import OOP class Person do var :name end joe =
Person.new(name: "Joe") robert = Person.new(name: "Robert")
import OOP class Person do var :name end joe =
Person.new(name: "Joe") robert = Person.new(name: "Robert") joe.name() # => "Joe" robert.name # => "Robert"
import OOP class Person do var :name def say_hello_to(who) do
IO.puts("#{this.name}: #{who.name}") end end joe = Person.new(name: "Joe") robert = Person.new(name: "Robert") joe.name() # => "Joe" robert.name # => "Robert" joe.say_hello_to(robert) # => Joe: Hello, Robert
import class var def end end joe robert joe.name() #
=> "Joe" robert.name # => "Robert" joe.say_hello_to(robert) # => Joe: Hello, Robert this.name
joe = Person.new(name: "Joe") joe.set_name("Hipster Joe") # => :ok joe.name
# => "Hipster Joe"
Q: How does it work?
Q: How does it work? A: You don’t want to
know.
Q: How does it work? A: Macros.
Perhaps it’s not that bad…
Q: What’s worse than OOP?
Q: What’s worse than OOP? A: OOP with inheritance.
import OOP class Human do var :name end
import OOP class Human do var :name end class Doctor
< Human do end
import OOP class Human do var :name end class Doctor
< Human do def title do "Dr. #{name}" end end
import OOP class Human do var :name end class Doctor
< Human do def title do "Dr. #{name}" end end dr = Doctor.new(name: "Jekyll") dr.title # => "Dr. Jekyll"
Perhaps it’s not that bad…
Q: What’s worse than OOP with inheritance?
Q: What’s worse than OOP with inheritance? A: OOP with
multiple inheritance.
import OOP class Human do end
import OOP class Human do end class Spider do end
import OOP class Human do end class Spider do end
class Spiderman < [Human, Spider] do end
Elixir Guidelines
Q: What’s the 1st rule of writing macros? Elixir Guidelines
Q: What’s the 1st rule of writing macros? A: Don’t
write macros. Elixir Guidelines
Q: What’s the 1st rule of doing OOP in Elixir?
Elixir Guidelines
Q: What’s the 1st rule of doing OOP in Elixir?
A: Don’t do OOP in Elixir. Elixir Guidelines
None
• Elixir is powerful
• Elixir is powerful • DSLs, abstractions, semantics
• Elixir is powerful • DSLs, abstractions, semantics • Complexity
• Elixir is powerful • DSLs, abstractions, semantics • Complexity
• Simplicty
Thank you! @wojtekmach wojtekmach/oop