differnce between .nil? , .empty?, .blank?

S

Sijo Kg

Hi
Could you please tell me when to use .nil? , .empty?, .blank? .What
are the difference between them.. For example I have
params[:company][:whichCompany]
And to check for it is null I first attempted all these and finally the
following worked
if !params[:company][:whichCompany].empty?

So now really i am confused .Please tell me the differnce

Thanks in advance
Sijo
 
X

Xavier Noria

Could you please tell me when to use .nil? , .empty?, .blank? .What
are the difference between them.. For example I have
params[:company][:whichCompany]
And to check for it is null I first attempted all these and finally the
following worked
if !params[:company][:whichCompany].empty?

So now really i am confused .Please tell me the differnce

nil? tests whether the object is exactly nil, that is whether it is
the one and only want instance of NilClass.

empty? is a method some objects respond to. You need to check the
documentation for each case. For example, and empty array is one that
is not nil (it is an array right?) and has no elements. An empty
string is one that is not nil (it is a string right?) and has no
bytes, nothing.

The blank? method you ask for does not belong to Ruby, it is a Rails
extension: http://api.rubyonrails.com/classes/Object.html#M000011.
 
S

Stefano Crocco

Hi
Could you please tell me when to use .nil? , .empty?, .blank? .What
are the difference between them.. For example I have
params[:company][:whichCompany]
And to check for it is null I first attempted all these and finally the
following worked
if !params[:company][:whichCompany].empty?

So now really i am confused .Please tell me the differnce

Thanks in advance
Sijo

nil? tests whether the receiver is the nil object, that is the only instance
of class NilClass, which is often used to indicate an invalid value. This
method is defined in class Object, and thus is availlable for every object.

The other two methods, instead, are defined only for specific classes, so the
answer depends. Usually, empty? is used to test whether an object is "empty",
for some class-depending meaning of empty. For example, String#empty? returns
true if the string contains no characters, Array#empty? and Hash#empty?
returns true if the array or hash has no entries. Other classes may define an
empty? method in other ways. Note that, unlike nil?, empty? isn't defined for
all classes.

Regarding blank?, I never heard of it, so I can't help you. You should look at
the documentation of the class defining it.

Here are some examples about nil? and empty?

nil.nil?
=> true

false.nil?
=> false

1.nil?
=> false

0.nil?
=> false

"".nil?
=> false

[].nil?
=> false

"".empty?
=> true

"abc".empty?
=> false

[].empty?
=> true

[1, 2, 3].empty?
=> false

1.empty?
=> NoMethodError

The last example means that the empty? method is not defined for class Fixnum

I hope this helps

Stefano
 
B

Bill Walton

Stefano said:
Regarding blank?, I never heard of it

It's a Rails method on the Object class that 'combines' the test for nil?
and empty?. Simplifies 'if thing.nil? || thing.empty?' to 'if
thing.blank?'.

Best regards,
Bill
 
M

Marc Heiler

Isn't .nil? and .empty? in a way testing for a very similar situation?

Some instance var:
@colour = 'black'


Compared:
@colour = ''
@colour = nil


Which one to prefer of these?
 
B

Bill Walton

Hi Marc,

Marc said:
Isn't .nil? and .empty? in a way testing for a very similar
situation?

Not in Ruby. empty? is true for a String of length 0. The value of the
String is not Nil. It turns out that Nil is very important in evaluations
since it's one of the two items in Ruby that evaluates to false.

irb(main):001:0> str = String.new
=> ""
irb(main):002:0> str.length
=> 0
irb(main):003:0> if str then puts 'a zero-length string is still a string'
end
a zero-length string is still a string
=> nil
irb(main):004:0> str = nil
=> nil
irb(main):005:0> if str.nil? then puts 'assigning a nil value essentially
kills
the object' end
assigning a nil value essentially kills the object
=> nil.

HTH,
Bill
 
N

Niklas Heinrich

blank? is not only a combination.
blank? also test if there are printable characters in a string:

\n".empty?
=> false
"\n".blank?
=> true

Niklas Heinrich
 
X

Xavier Noria

blank? is not only a combination.
blank? also test if there are printable characters in a string:

More precisely any \S. Also false is blank? but the integer 0 is not.
 
M

Michael Nissim

Xavier said:
Could you please tell me when to use .nil? , .empty?, .blank? .What
are the difference between them.. For example I have
params[:company][:whichCompany]
And to check for it is null I first attempted all these and finally the
following worked
if !params[:company][:whichCompany].empty?

So now really i am confused .Please tell me the differnce

nil? tests whether the object is exactly nil, that is whether it is
the one and only want instance of NilClass.

empty? is a method some objects respond to. You need to check the
documentation for each case. For example, and empty array is one that
is not nil (it is an array right?) and has no elements. An empty
string is one that is not nil (it is a string right?) and has no
bytes, nothing.

The blank? method you ask for does not belong to Ruby, it is a Rails
extension: http://api.rubyonrails.com/classes/Object.html#M000011.

This is answer was concise and helpful. Thanks!

I personally find this confusing:
a[:real]=false
a[:real] => false
a[:real].blank? => true ??

if I populated a[:real] with false, why does '.blank?' return true?
That's confusing. But hey, if you can't win them, join them. I love Ruby
and Rails!
 
X

Xavier Noria

I personally find this confusing:
a[:real]=3Dfalse
a[:real] =C2=A0 =C2=A0=3D> false
a[:real].blank? =C2=A0 =C2=A0=3D> true =C2=A0 =C2=A0??

if I populated a[:real] with false, why does '.blank?' return true?
That's confusing. But hey, if you can't win them, join them. I love Ruby
and Rails!

It should work

$ script/console
Loading development environment (Rails 2.3.2)
a =3D {} =3D> {}
a[:real] =3D false =3D> false
a[:real].blank?
=3D> true

false is blank?, no matter where it is stored.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top