Data Types
Booleans and Nil
Ruby uses true, false, and nil to model yes/no and missing values.
nil
`nil` represents no value. A comparison such as `value.nil?` returns a boolean.
Booleans and Nil
booleans_nil.rb
Replay: real traced execution (multi-file project)
logged_in = true
nickname = nil
status = logged_in ? "active" : "guest"
has_nickname = !nickname.nil?
puts "status=#{status}"
puts "has_nickname=#{has_nickname}"
logged_in = false
nickname = nil
status = logged_in ? "active" : "guest"
has_nickname = !nickname.nil?
puts "status=#{status}"
puts "has_nickname=#{has_nickname}"
logged_in ← true, nickname ← (empty), status ← active, has_nickname ← false
1logged_in→ true = true #@logged_in=false2nickname→ (empty) = nil3status→ active = logged_intrue ? "active" : "guest"4has_nickname→ false = !nickname.nil?true56puts "status=#{statusactive}"7puts "has_nickname=#{has_nicknamefalse}"outputstatus=active has_nickname=false
logged_in ← false, nickname ← (empty), status ← guest, has_nickname ← false
1logged_in→ false = false2nickname→ (empty) = nil3status→ guest = logged_infalse ? "active" : "guest"4has_nickname→ false = !nickname.nil?true56puts "status=#{statusguest}"7puts "has_nickname=#{has_nicknamefalse}"outputstatus=guest has_nickname=false
Follow the Values
logged_instarts astrue.nicknamestarts asnil.- The ternary chooses
"active"becauselogged_inis true. !nickname.nil?becomesfalsebecause the nickname is missing.- The program prints
status=activeandhas_nickname=false. | logged_in | nickname | status | has_nickname | | --- | --- | --- | --- | | true | nil | active | false | | false | nil | guest | false |
Exercise: booleans_nil.rb
Reproduce status=active and has_nickname=false, then use the pinned logged_in=false value to predict the status.