Why Treat 0 as True in Ruby?
I'm guessing that Matz wanted conceptual simplicity of "truthiness" as such - the only "false" values are false
and nil
. Period.
Using just false
would be the cleanest but there is understandable need for including nil
. To include the integer zero as a special case might open the mental floodgates of questioning truthiness of other types. What about strings, is ""
false? And arrays, is []
false? And hashes, is {}
false? Ad insanitum (see JavaScript)...
In Common Lisp, 0 is also treated as true. For example, the following code returns true
.
(if 0 'true 'false)
No doubt, Ruby is following the same design decision made in Lisp. In Lisp, only an empty list (represented by nil
) is false.
In ruby, if exists, it's true. If not, it's false.
so, with Ruby null(no address assigned) and false are only false.
All others are true because it has address assigned to it.
I think of this way; "Does it exist?"