Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Why doesn't Ruby have Boolean class - final ver...

Avatar for Masafumi Okura Masafumi Okura
September 11, 2025
41

Why doesn't Ruby have Boolean class - final version

https://friendlyrb.com
This is a talk given at Friendly.rb 2025

Avatar for Masafumi Okura

Masafumi Okura

September 11, 2025
Tweet

Transcript

  1. introduce(self) • Name: OKURA Masafumi • From: Tokyo, Japan •

    Work: Freelancer • Activity: Kaigi on Rails (Founder, chief organizer), speaker (RubyConf Tw 2023/2025, EuRuKo 2023, Red Dot Ruby Conference 2024, Rails World 2025, Friendly.rb 2025), OSS (Alba and a few others) • Favorite method: `BasicObject#instance_eval`
  2. I’m going to talk about… 1. Fact: How Ruby implements

    Boolean-related classes and methods 2. Opinion: Why don’t we need Boolean class with Ruby
  3. The takeaways of this talk are… • The “Ruby Way”

    about Boolean • Know more about language • The design principle of programming languages • Decision of NOT adding Boolean class • (And How Matz thinks about this???) • (In the original talk, Matz wasn’t there)
  4. Boolean-related facts in Ruby • TrueClass and FalseClass are the

    class for true and false object, respectively • These classes are “singleton” classes that have only one instance, not having `new` method • TrueClass and FalseClass don’t have a common parent class • There is no method such as `to_bool`, but we can use `!!expr` idiom • Any object, not only true and false, can be used with `if` expression (false and `nil` are falsy, every other object including empty string and 0 are truthy)
  5. Other languages • There are “immediate values” (Java) • true

    and false are immediate values (not objects, no classes) in Java • In some languages, only `true` and `false` can be used for `if` statement (Java, Haskell, etc.) • In some languages, there are methods to convert objects into boolean values (Python, JavaScript, etc.)
  6. Rejected for several reasons: many gems and libraries had already

    introduced Boolean class. I don't want to break them. true and false are the only representative of true-false values. In Ruby. nil and false are falsy values, and everything else is a true value. There's no meaning for having
  7. 66

  8. 63

  9. Conclusion: true and false share little. They are the only

    representative, not having useful behaviors.
  10. > In object-oriented programming, a class de fi nes the

    shared aspects of objects created from the class. https://en.wikipedia.org/wiki/Class_(computer_programming)
  11. Rejected for several reasons: many gems and libraries had already

    introduced Boolean class. I don't want to break them. true and false are the only representative of true- false values. In Ruby. nil and false are falsy values, and everything else is a true value. There's no meaning for having a superclass of TrueClass and FalseClass as Boolean. Matz. ʢUnderscored by the speakerʣ
  12. Rejected for several reasons: many gems and libraries had already

    introduced Boolean class. I don't want to break them. true and false are the only representative of true-false values. In Ruby. nil and false are falsy values, and everything else is a true value. There's no meaning for having
  13. Naming is hard • Recently added “Ractor” used to be

    “Guild” • Game developers complained that they already use “Guild” class • Recently added “Data” class was occupied by Ruby itself so it was safe • Adding “Boolean” may destroy other “Boolean” classes
  14. The reasons why we don’t need Boolean class • true

    and false share nothing • There’s no meaning of a superclass for them • Few use cases • `is_a?(Boolean) might be the only one • Compatibility issues • Naming is hard
  15. Lessons learned • Designing a programming language is interesting •

    In the issue, many developers express their thoughts and ideas • Not always “correct answer” • “This should be useful” might not be a right reason to add something • Ruby is different from other languages
  16. Contact me! • Personal website: https://okuramasafumi.com • ruby.social: https://ruby.social/@okuramasafumi •

    X: https://x.com/okuramasafumi • GitHub: https://github.com/okuramasafumi • LinkedIn: https://www.linkedin.com/in/masafumi-okura-82651128/