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
Wojtek Mach
February 17, 2016
4
300
OOP in Elixir
Wojtek Mach
February 17, 2016
Tweet
Share
More Decks by Wojtek Mach
See All by Wojtek Mach
Writing an Ecto Adapter: Introducing MyXQL
wojtekmach
1
150
Hex Core
wojtekmach
0
150
Recurrences & Intervals
wojtekmach
2
470
Building an Umbrella Project
wojtekmach
21
6k
Advanced OOP in Elixir
wojtekmach
6
670
Pattern Matching
wojtekmach
1
310
Formatting ruby code
wojtekmach
0
130
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
62
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Why Our Code Smells
bkeepers
PRO
340
58k
The Curse of the Amulet
leimatthew05
1
8.4k
Claude Code のすすめ
schroneko
67
210k
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
64
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
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