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

Discussion in 'Ruby' started by Sijo Kg, Jul 24, 2008.

  1. Sijo Kg

    Sijo Kg Guest

    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
    --
    Posted via http://www.ruby-forum.com/.
     
    Sijo Kg, Jul 24, 2008
    #1
    1. Advertising

  2. Sijo Kg

    Xavier Noria Guest

    On Thu, Jul 24, 2008 at 9:00 AM, Sijo Kg <> wrote:

    > 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.
     
    Xavier Noria, Jul 24, 2008
    #2
    1. Advertising

  3. On Thursday 24 July 2008, Sijo Kg wrote:
    > 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
     
    Stefano Crocco, Jul 24, 2008
    #3
  4. Sijo Kg

    Sijo Kg Guest

    Sijo Kg, Jul 24, 2008
    #4
  5. Sijo Kg

    Bill Walton Guest

    Stefano Crocco wrote:

    > 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
     
    Bill Walton, Jul 24, 2008
    #5
  6. Sijo Kg

    Marc Heiler Guest

    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?
    --
    Posted via http://www.ruby-forum.com/.
     
    Marc Heiler, Jul 24, 2008
    #6
  7. Sijo Kg

    Bill Walton Guest

    Hi Marc,

    Marc Heiler wrote:

    > 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
     
    Bill Walton, Jul 24, 2008
    #7
  8. 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

    Bill Walton wrote:

    > Stefano Crocco wrote:
    >
    >> 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
    >
    >
     
    Niklas Heinrich, Jul 24, 2008
    #8
  9. Sijo Kg

    Xavier Noria Guest

    On Thu, Jul 24, 2008 at 7:49 PM, Niklas Heinrich <> wrote:

    > 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.
     
    Xavier Noria, Jul 24, 2008
    #9
  10. Xavier Noria wrote:
    > On Thu, Jul 24, 2008 at 9:00 AM, Sijo Kg <> wrote:
    >
    >> 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!

    --
    Posted via http://www.ruby-forum.com/.
     
    Michael Nissim, Jul 15, 2010
    #10
  11. Sijo Kg

    Xavier Noria Guest

    On Thu, Jul 15, 2010 at 7:45 AM, Michael Nissim <> wro=
    te:

    > 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.
     
    Xavier Noria, Jul 15, 2010
    #11
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Markku Salminen
    Replies:
    3
    Views:
    5,891
    Michael Borgwardt
    Jan 21, 2004
  2. Brian Candler

    puts nil generates "nil\n"

    Brian Candler, Nov 6, 2004, in forum: Ruby
    Replies:
    1
    Views:
    124
  3. John Carter
    Replies:
    64
    Views:
    697
    Klaus Stein
    May 19, 2005
  4. Christoffer Sawicki
    Replies:
    5
    Views:
    286
    Christoffer Sawicki
    Sep 2, 2006
  5. Jason  Vogel
    Replies:
    3
    Views:
    101
    William James
    Dec 10, 2006
Loading...

Share This Page