A == nil or a.nil?


#1

hello,

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?

thanks
konstantin


#2

On 11/23/05, ako… removed_email_address@domain.invalid wrote:

over the other? also, i am curious to know why nil? has been
implemented at all? is ‘== nil’ not enough?

thanks
konstantin

for readability, I wager.


#3

On 11/22/05, ako… removed_email_address@domain.invalid wrote:

implemented at all? is ‘== nil’ not enough?

thanks
konstantin

== 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)


#4

ako… a écrit :

implemented at all? is ‘== nil’ not enough?

thanks
konstantin

By the way,
a == nil
is also a method call. It is actually equivalent to:
a.==(nil)

If nil has a == method, why not adding some other practical methods like
nil? ? Actually, nil? is probably a bit faster than ==(nil).


Lionel T.

Personal web site: http://users.skynet.be/lthiry/


#5

From: “ako…” removed_email_address@domain.invalid

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!”}

:slight_smile: 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!”

Zero is not false in Ruby.

Regards,

Bill


#6

On 11/22/05, ako… removed_email_address@domain.invalid wrote:

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.


#7

2005/11/23, Rob R. removed_email_address@domain.invalid:

if !a
#stuff
end

unless a
# stuff
end