SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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]

Contenu connexe

En vedette

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
 

En vedette (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
 

Dernier

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
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
 

Dernier (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
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
 

All Objects are created .equal?