SlideShare a Scribd company logo
1 of 30
Download to read offline
All Objects Are Created .equal?
  Understand equality in your Ruby codez
github.com/gsterndale/equality
Equality methods


a == b

a === b

a.eql? b

a.equal? b
==
Everyday equality (==)



a == b
Default ==

a = MyBasicClass.new
b = MyBasicClass.new

a == b
# => false

b = a

a == b
# => true
Overriding ==
class RomanNumeral

  def ==(other)
    if other.respond_to?(:to_f)
      self.to_f == other.to_f
    else
      false
    end
  end

end
Overriding ==


iv   = RomanNumeral.new('IV')

iiii = RomanNumeral.new('IIII')

iv == iiii
# => true
===
case statement equality (===)



a === b
Default ===

a = Object.new
b = Object.new

case   a
when   b
  'b   must === a'
else
  'b   must NOT === a'
end
# =>   "b must NOT === a"
Float ===

a = 1
b = 1.0

case   a
when   b
  'b   must === a'
else
  'b   must NOT === a'
end
# =>   "b must === a"
Regexp ===


case '123'
when /d+/
  'At least one number'
else
  'No numbers found'
end
# => "At least one number"
When === != ==


/d+/ == '123'
# => false

/d+/ === '123'
# => true
Class ===


case 'abc'
when String
  'It is a String!'
else
  'Not a String'
end
# => "It is a String!"
Asymmetry


/d+/ === '123'
# => true

'123' === /d+/
# => false
Asymmetry

2 === Integer
# => false

Integer === 2
# => true

Fixnum === 2
# => true
.equal?
Object equality (.equal?)

a = 'FOO'
b = a

a.equal? b
# => true

a.equal? 'FOO'
# => false
.eql?
Hash key equality (.eql?)



a.eql? b
Default .eql?
foo = Object.new
hash = { foo => 'My value' }

bar = Object.new

foo.equal? bar
# => false
foo.eql? bar
# => false

hash[bar]
# => nil
String .eql?
foo = 'My Key'
hash = { foo => 'My value' }

bar = 'My Key'

foo.equal? bar
# => false
foo.eql? bar
# => true

hash[bar]
# => "My value"
Overriding .eql?

class RomanNumeral

  def eql?(other)
    other.kind_of?(RomanNumeral) &&
      self.to_i.eql?(other.to_i)
  end

end
Overriding .eql?
iv   = RomanNumeral.new('IV')

hash = { iv => 'Four' }

iiii = RomanNumeral.new('IIII')

iv.equal? iiii
# => false
iv.eql? iiii
# => true

hash[iiii]
# => "Four"
Comparable
Comparison methods
# You must define <=>
a <=> b
# => -1, 0, 1 -or- nil

a == b

a   > b
a   < b
a   >= b
a   <= b

c.between?(a, b)
Overriding <=>
class RomanNumeral

  def <=>(other)
    if other.respond_to?(:to_f)
      self.to_f <=> other.to_f
    else
      nil
    end
  end

end
Overriding <=>
v = RomanNumeral.new('V')
x = RomanNumeral.new('X')

v <=> x
# => -1

v >= x
# => false

RomanNumeral.new('VIII').between?(v, x)
# => true
Sorting Enumerables

iv   = RomanNumeral.new('IV')
iiii = RomanNumeral.new('IIII')
x    = RomanNumeral.new('X')

[iv, x, iiii]
# => [IV, X, IIII]

[iv, x, iiii].sort
# => [IV, IIII, X]

More Related Content

Viewers also liked

plaY [commercial]
plaY [commercial]plaY [commercial]
plaY [commercial]smwarfield
 
Personagraph Whitepaper
Personagraph WhitepaperPersonagraph Whitepaper
Personagraph WhitepaperTapan Kamdar
 
Digital Trends Impacting News Companies
Digital Trends Impacting News CompaniesDigital Trends Impacting News Companies
Digital Trends Impacting News CompaniesReid Williams
 
Server Side 2009
Server Side 2009Server Side 2009
Server Side 2009vaclav.lohr
 
Copyright and Fair Use for USU Extension
Copyright and Fair Use for USU ExtensionCopyright and Fair Use for USU Extension
Copyright and Fair Use for USU ExtensionBritt Fagerheim
 
Ctm louvre
Ctm louvreCtm louvre
Ctm louvreclaireso
 
Change history with Git
Change history with GitChange history with Git
Change history with Gitgsterndale
 
Como subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodleComo subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodleJose Ramirez
 
SEO pro manažery
SEO pro manažerySEO pro manažery
SEO pro manažeryvaclav.lohr
 
Smartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - YogyakartaSmartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - YogyakartaJarwadi MJ
 
Lunch Menus and Recipes from Portugal
Lunch Menus and Recipes from PortugalLunch Menus and Recipes from Portugal
Lunch Menus and Recipes from PortugalTiina Sarisalmi
 
Integrating Library Resources into Blackboard
Integrating Library Resources into BlackboardIntegrating Library Resources into Blackboard
Integrating Library Resources into BlackboardBritt Fagerheim
 
Christmas Handicraft by Thanasis
Christmas Handicraft by ThanasisChristmas Handicraft by Thanasis
Christmas Handicraft by ThanasisTiina Sarisalmi
 
Library As Teaching Resource
Library As Teaching ResourceLibrary As Teaching Resource
Library As Teaching ResourceBritt Fagerheim
 

Viewers also liked (20)

What WELD does
What WELD doesWhat WELD does
What WELD does
 
plaY [commercial]
plaY [commercial]plaY [commercial]
plaY [commercial]
 
Personagraph Whitepaper
Personagraph WhitepaperPersonagraph Whitepaper
Personagraph Whitepaper
 
Digital Trends Impacting News Companies
Digital Trends Impacting News CompaniesDigital Trends Impacting News Companies
Digital Trends Impacting News Companies
 
Server Side 2009
Server Side 2009Server Side 2009
Server Side 2009
 
Copyright and Fair Use for USU Extension
Copyright and Fair Use for USU ExtensionCopyright and Fair Use for USU Extension
Copyright and Fair Use for USU Extension
 
Third comeback report 4.8,2011
Third comeback report 4.8,2011Third comeback report 4.8,2011
Third comeback report 4.8,2011
 
Ctm louvre
Ctm louvreCtm louvre
Ctm louvre
 
The vmware story
The vmware storyThe vmware story
The vmware story
 
Change history with Git
Change history with GitChange history with Git
Change history with Git
 
Czech Day in Kozani
Czech Day in KozaniCzech Day in Kozani
Czech Day in Kozani
 
Como subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodleComo subir una actividad o tarea a moodle
Como subir una actividad o tarea a moodle
 
Sinsai.info and Crisis Mapping
Sinsai.info and Crisis MappingSinsai.info and Crisis Mapping
Sinsai.info and Crisis Mapping
 
SEO pro manažery
SEO pro manažerySEO pro manažery
SEO pro manažery
 
Smartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - YogyakartaSmartfren Network Test Drive Jakarta - Yogyakarta
Smartfren Network Test Drive Jakarta - Yogyakarta
 
Lunch Menus and Recipes from Portugal
Lunch Menus and Recipes from PortugalLunch Menus and Recipes from Portugal
Lunch Menus and Recipes from Portugal
 
Integrating Library Resources into Blackboard
Integrating Library Resources into BlackboardIntegrating Library Resources into Blackboard
Integrating Library Resources into Blackboard
 
Christmas Handicraft by Thanasis
Christmas Handicraft by ThanasisChristmas Handicraft by Thanasis
Christmas Handicraft by Thanasis
 
Kort Om Etikk2
Kort Om Etikk2Kort Om Etikk2
Kort Om Etikk2
 
Library As Teaching Resource
Library As Teaching ResourceLibrary As Teaching Resource
Library As Teaching Resource
 

Recently uploaded

Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 

All Objects are created .equal?