Forum: Ruby a == nil or a.nil?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
akonsu (Guest)
on 2005-11-23 01:05
(Received via mailing list)
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
mrkode (Guest)
on 2005-11-23 01:17
(Received via mailing list)
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.
eric.mahurin (Guest)
on 2005-11-23 01:21
(Received via mailing list)
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)
billk (Guest)
on 2005-11-23 02:29
(Received via mailing list)
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!"}

:-)  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
lthiryidontwantspams (Guest)
on 2005-11-23 04:26
(Received via mailing list)
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/
rascal1182 (Guest)
on 2005-11-23 04:38
(Received via mailing list)
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.
rampant (Guest)
on 2005-11-23 07:07
(Received via mailing list)
2005/11/23, Rob R. <removed_email_address@domain.invalid>:
>
> if !a
>   #stuff
> end
>

unless a
    # stuff
end
This topic is locked and can not be replied to.