this is more of a philosophical question. my C experience makes me feel
more comfortable with expressions such as ‘a == nil’ rather than
a.nil?. i feel strange when i invoke a method on a nil value. i know,
nil is also an object and not just a zero reference but still it feels
strange…
would the experts please comment on why one way would be preferable
over the other? also, i am curious to know why nil? has been
implemented at all? is ‘== nil’ not enough?
== is usually meant to query whether the data in the objects are the
same (or they are the same object). For most == methods, if the data
is not comparable (not the same class), it will return false rather
than raise an exception. So… == nil should work fine in most cases.
I would use one of these which are more direct:
a.nil?
nil==a # uses the NilClass#== rather than an arbitrary ==
a.equal?(a)
nil.equal?(a)
this is more of a philosophical question. my C experience makes me feel
more comfortable with expressions such as ‘a == nil’ rather than
a.nil?. i feel strange when i invoke a method on a nil value.
Another thing that would be strange in C is:
5.times {print “Hello!”}
But to me, it’s not worth embracing C’s ideosyncracies when
programming
in Ruby. The “everything is an object” consistency of Ruby is an
elegant
and enjoyable part of the language.
As an aside, if you’re coming from C, you might be surprised that:
a = 0 # zero
print “it’s true!” if a # => prints “it’s true!”
this is more of a philosophical question. my C experience makes me feel
more comfortable with expressions such as ‘a == nil’ rather than
a.nil?. i feel strange when i invoke a method on a nil value. i know,
nil is also an object and not just a zero reference but still it feels
strange…
If you’re not feeling the nil methods, remember nil is the only
Boolean false (besides FalseClass). So, unless you specifically need
to differentiate between false and nil, you can do this:
if !a #stuff
end
That’s something I see a lot in C, as NULL == false. You might feel
more at home, and save a method call.