Symbols, nil, Booleans and Truthiness

7.1 Symbols

Use symbols for identifiers, keys, and options. Use strings for text data.

:name                       # an immutable, interned identifier
:name.object_id == :name.object_id    # true (same object every time)
"name".to_sym; :name.to_s
%i[a b c]                   # [:a, :b, :c]
{ name: "Ana" }             # symbols as hash keys (most common use)
:upcase.to_proc.call("hi")  # "HI"  (enables &:upcase)

7.2 nil

nil.class           # NilClass
nil.to_s            # ""
nil.to_a            # []
nil.to_i            # 0
value.nil?
user&.name          # safe navigation: nil if user is nil
name = input || "default"

7.3 Truthiness

Only false and nil are falsy. Everything else is truthy, including 0, "", and [] (unlike Python/JS).

puts "truthy" if 0          # prints!
puts "truthy" if ""         # prints!
puts "empty" if [].empty?
!!value                     # convert to a boolean