Skip to content

Instantly share code, notes, and snippets.

@Jellyfishboy
Last active December 6, 2017 05:26
Show Gist options
  • Save Jellyfishboy/5b9d59c7cd1952aed594392cbd38e3c8 to your computer and use it in GitHub Desktop.
Save Jellyfishboy/5b9d59c7cd1952aed594392cbd38e3c8 to your computer and use it in GitHub Desktop.
nil vs empty vs blank in Ruby on Rails

.nil? can be used on any object and is true if the object is nil.

.empty? can be used on strings, arrays and hashes and returns true if:

  • String length == 0
  • Array length == 0
  • Hash length == 0

Running .empty? on something that is nil will throw a NoMethodError.

That is where .blank? comes in. It is implemented by Rails and will operate on any object as well as work like .empty? on strings, arrays and hashes.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? also evaluates true on strings which are non-empty but contain only whitespace:

"  ".blank? == true
"  ".empty? == false

Rails also provides .present?, which returns the negation of .blank?.

Array gotcha: blank? will return false even if all elements of an array are blank. To determine blankness in this case, use all? with blank?, for example:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

Credit: http://stackoverflow.com/a/888877

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment