[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

opposite .nil?

Andrew Stone

12/11/2007 6:41:00 PM

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

I've looked around, but could not find a method that is the opposite of
nil?. I know there is !my_var.nil?, but I think my_var.exists? is more
readable.

I wanted to throw this out there before I added the method in myself.

thanks,
andy

--
Andrew Stone

15 Answers

Justin Collins

12/11/2007 6:46:00 PM

0

Andrew Stone wrote:
> I've looked around, but could not find a method that is the opposite of
> .nil?. I know there is !my_var.nil?, but I think my_var.exists? is more
> readable.
>
> I wanted to throw this out there before I added the method in myself.
>
> thanks,
> andy
>
>

if not my_var.nil?

is the same as

if my_var

_unless_ my_var is false.

-Justin

Andrew Stone

12/11/2007 6:56:00 PM

0

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

if not my_var.nil?
>
>
Thanks Justin. I should have been more clear with the usage.

def should_this_be_done?
am_I_sure? && my_object.var && !my_object.var.nil?
end

I just think it would read better if the last test was my_object.var.exists?

thanks,
andy
--
Andrew Stone

Andrew Stone

12/11/2007 7:00:00 PM

0

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

> def should_this_be_done?
> am_I_sure? && my_object.var && !my_object.var.nil?
> end
>
>
Ooops... meant

def should_this_be_done?
am_I_sure? && my_object && !my_object.var.nil?
end

Didn't mean to put add .var on the second test.


--
Andrew Stone

Yossef Mendelssohn

12/11/2007 7:28:00 PM

0

On Dec 11, 12:56 pm, "Andrew Stone" <stoneli...@gmail.com> wrote:
> if not my_var.nil?
>
> Thanks Justin. I should have been more clear with the usage.
>
> def should_this_be_done?
> am_I_sure? && my_object.var && !my_object.var.nil?
> end
>
> I just think it would read better if the last test was my_object.var.exists?
>
> thanks,
> andy
> --
> Andrew Stone

There's no reason to say myobject.var && !my.object.var.nil? Any
object that passes the first test is not nil.

The only reason to check !obj.nil? is if you want false to be an
accepted value.

--
-yossef

Phrogz

12/11/2007 7:40:00 PM

0

On Dec 11, 11:56 am, Andrew Stone <stoneli...@gmail.com> wrote:
> Note: parts of this message were removed by the gateway to make it a legal Usenet post.
>
> if not my_var.nil?
>
> Thanks Justin. I should have been more clear with the usage.
>
> def should_this_be_done?
> am_I_sure? && my_object.var && !my_object.var.nil?
> end
>
> I just think it would read better if the last test was my_object.var.exists?

1) No such opposite-of-nil? method exists. If you want it, add it.

class Object
def exists?
true
end
end

class NilClass
def exists?
false
end
end

# up to you if you want this for FalseClass, too


2) In the particular example above (which I realize is just an
example) you could write that as:

def should_this_by_done?
am_I_sure? unless !my_object || my_object.var.nil?
end

But, of course, that just moves the negation.

Andrew Stone

12/11/2007 7:41:00 PM

0

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

>
> There's no reason to say myobject.var && !my.object.var.nil? Any
> object that passes the first test is not nil.
>
>
Please see the followup email I sent.

thanks,
andy
--
Andrew Stone

Andrew Stone

12/11/2007 8:04:00 PM

0

Note: parts of this message were removed by the gateway to make it a legal Usenet post.

> 1) No such opposite-of-nil? method exists. If you want it, add it.
>

Thanks for actually answering my question. Much appreciated.

2) In the particular example above (which I realize is just an
> example) you could write that as:
>
> def should_this_by_done?
> am_I_sure? unless !my_object || my_object.var.nil?
> end
>
> But, of course, that just moves the negation.
>
>
Sure, I was just looking for a more readable construct. Thanks again for
your reply.


--
Andrew Stone

Robert Klemme

12/11/2007 10:04:00 PM

0

On 11.12.2007 20:00, Andrew Stone wrote:
> Note: parts of this message were removed by the gateway to make it a legal Usenet post.
>
>> def should_this_be_done?
>> am_I_sure? && my_object.var && !my_object.var.nil?
>> end
>>
>>
> Ooops... meant
>
> def should_this_be_done?
> am_I_sure? && my_object && !my_object.var.nil?
> end
>
> Didn't mean to put add .var on the second test.

Well, you could do

am_I_sure? && my_object && my_object.var

It's not exactly the same but if you don't care whether my_object.var is
nil or false or if you know that it never will be false then it's ok.

Kind regards

robert

Gary Wright

12/11/2007 11:27:00 PM

0


On Dec 11, 2007, at 3:03 PM, Andrew Stone wrote:
> Sure, I was just looking for a more readable construct. Thanks
> again for
> your reply.

I'd suggest not_nil?

class Object
def not_nil?
!self.nil?
end
end

exists? or not_nil? are both awkward if you actually have
a reference to false:

condition = (2 > 3) # condition is false

if condition.exists?
# this branch will run because condition is not nil
else
# do something else
end

I think it would be clearer to be explicit about your intent
if you really want to bundle up false with true-behaving
objects:

if condition or (condition == false)
# do something
end


In practice, I've rarely come across a situation where I wanted
to treat a false reference the same as a reference to a 'real'
object.

Gary Wright

Ken Bloom

12/12/2007 12:02:00 AM

0

On Tue, 11 Dec 2007 15:03:53 -0500, Andrew Stone wrote:

> Note: parts of this message were removed by the gateway to make it a
> legal Usenet post.
>
>> 1) No such opposite-of-nil? method exists. If you want it, add it.
>>
>>
> Thanks for actually answering my question. Much appreciated.
>
> 2) In the particular example above (which I realize is just an
>> example) you could write that as:
>>
>> def should_this_by_done?
>> am_I_sure? unless !my_object || my_object.var.nil?
>> end
>>
>> But, of course, that just moves the negation.
>>
>>
> Sure, I was just looking for a more readable construct. Thanks again
> for your reply.

def should_this_be_done?
am_I_sure? && my_object && !my_object.var.nil?
end

Here's a more readable construct:

def should_this_be_done?
am_I_sure? and my_object and not my_object.var.nil?
end

You're not forced to program Ruby like it's C.

--Ken

--
Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu...