freeCodeCamp/guide/english/ruby/true-false-nil/index.md

61 lines
2.0 KiB
Markdown

---
title: True, False, and Nil
---
<h1>True, False, and Nil</h1>
`true`, `false`, and `nil` are special built-in data types in Ruby. Each of these keywords evaluates to an object that is the sole instance of its respective class.
```ruby
true.class
=> TrueClass
false.class
=> FalseClass
nil.class
=> NilClass
```
`true` and `false` are Ruby's native boolean values. A boolean value is a value that can only be one of two possible values: true or not true. The object `true` represents truth, while `false` represents the opposite. You can assign variables to `true` / `false`, pass them to methods, and generally use them as you would other objects (such as numbers, Strings, Arrays, Hashes).
`nil` is a special value that indicates the absence of a value: it is Ruby's way of referring to "nothing". An example of when you will encounter the `nil` object is when you ask for something that doesn't exist or cannot be found:
```ruby
hats = ["beret", "sombrero", "beanie", "fez", "flatcap"]
hats[0]
=> "beret" # the hat at index 0
hats[2]
=> "beanie" # the hat at index 2
hats[4]
=> "flatcap" # the hat at index 4
hats[5]
=> nil # there is no hat at index 5, index 5 holds nothing (nil)
```
Zero is not nothing (it's a number, which is something). Likewise, empty strings, arrays, and hashes are not nothing (they are objects, which happen to be empty). You can call the method `nil?` to check whether an object is nil.
```ruby
0.nil?
=> false
"".nil?
=> false
[].nil?
=> false
{}.nil?
=> false
nil.nil?
=> true
# from the example above
hats[5].nil?
=> true
```
Every object in Ruby has a boolean value, meaning it is considered either true or false in a boolean context. Those considered true in this context are "truthy" and those considered false are "falsey." In Ruby, <em>only</em> `false` and `nil` are "falsey," everything else is "truthy."
<h3>Other Resources</h3>
* https://ruby-doc.org/core-2.3.0/TrueClass.html
* https://ruby-doc.org/core-2.3.0/FalseClass.html
* https://ruby-doc.org/core-2.3.0/NilClass.html
* https://en.wikipedia.org/wiki/Boolean