Rails - Differences between nil?, empty?, blank?, and present?
Index
nil?
#nil? is a Ruby method on the Object class. Since all classes inherit from this class, #nil? can be used on any object.
nil.nil?
=> true
true.nil?
=> false
5.nil?
=> false
"".nil?
=> false
[].nil?
=> false
empty?
#empty? is a Ruby method that can be used on strings, arrays, hashes and sets.
strings
"".empty?
=> true
" ".empty?
=> false
"\t\n".empty?
=> false
arrays, hashes and sets
It returns true if they have no elements
[].empty?
=> true
{}.empty?
=> true
require 'set'
Set.new.empty?
=> true
blank?
#blank? is a Rails method. It operates on any object.
strings
"".blank?
=> true
" ".blank?
=> true
"\n\t".blank?
=> true
arrays, hashes and sets
It works just like #empty?
present?
#present? is a Rails method. It does the opposite of what #blank? does.
Recap
| #nil? | #empty? | #blank? | #present? | |
|---|---|---|---|---|
| 5 | false | NoMethodError | false | true |
| ”” | false | true | true | false |
| ” “ | false | false | true | false |
| “\t\n” | false | false | true | false |
| [] | false | true | true | false |
| [“a”] | false | false | false | true |
| {} | false | true | true | false |
| {a: “b”} | false | false | false | true |
| Set.new | false | true | true | false |
| nil | true | NoMethodError | true | false |
| true | false | NoMethodError | false | true |
| false | false | NoMethodError | true | false |