# Kind\_of?( NilClass )

**URL:** <https://www.ruby-forum.com/t/kind-of-nilclass/193288>\
**Category:** Ruby\
**Created:** [August 14, 2010, 10:02pm UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288 "2010-08-14T22:02:53Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 14, 2010, 10:02pm UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/1 "2010-08-14T22:02:53Z")

</div>

Should I write  
var.kind\_of?( NilClass )  
or simply  
var == nil  
?

I have the feeling that kind\_of?(NilClass) is more “proper”/“clean”  
but then again it decreases the readability and might not even be  
necessary.

Are there any situations where it makes sense to subclass NilClass?

Regards,  
Philipp

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 14, 2010, 10:04pm UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/2 "2010-08-14T22:04:38Z")

</div>

You can always var.nil?

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 14, 2010, 10:17pm UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/3 "2010-08-14T22:17:31Z")

</div>

Steve K. wrote:

> You can always var.nil?

Well, yes if the var is a kind\_of?(Object) but not if  
it’s just a BasicObject.

Regards,  
Philipp

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 15, 2010, 2:53am UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/4 "2010-08-15T02:53:09Z")

</div>

On Aug 14, 2010, at 1:02 PM, Philipp K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Should I write  
> var.kind\_of?( NilClass )  
> or simply  
> var == nil

Do you actually care if it is nil? Or just untruthy? I much prefer

```
not var

```

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 15, 2010, 7:59am UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/5 "2010-08-15T07:59:13Z")

</div>

On Saturday, August 14, 2010 03:10:28 pm Philipp K. wrote:

> Steve K. wrote:
> 
> > You can always var.nil?
> 
> Well, yes if the var is a kind\_of?(Object) but not if  
> it’s just a BasicObject.

The purpose of a BasicObject is, generally, to implement proxy classes.  
Presumably, this would send a nil? through to whatever you were  
proxying,  
right?

Also, I don’t see a kind\_of? on BasicObject, either, so calling pretty  
much  
anything on var would fail.

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 15, 2010, 11:37am UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/6 "2010-08-15T11:37:30Z")

</div>

David M. schrieb (am 15.8.10 07:58):

> Also, I don’t see a kind\_of? on BasicObject, either, so calling pretty much  
> anything on var would fail.

Right.

I guess I’ll stick with  
! var  
or  
not var  
which is what Ryan suggested and which is about twice as fast as  
any one of  
! var.nil?()  
! var.eql?(nil)  
! nil.eql?(var)  
! var.kind\_of?(NilClass)

Regards,  
Philipp

---

<div class="post-metadata">

**Author:** ![Philipp\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/b77776/32.png) [@Philipp\_K](https://www.ruby-forum.com/u/Philipp_K)\
**Post date:** [August 15, 2010, 12:36pm UTC](https://www.ruby-forum.com/t/kind-of-nilclass/193288/7 "2010-08-15T12:36:01Z")

</div>

On 14.08.2010 22:02, Philipp K. wrote:

> Should I write  
> var.kind\_of?( NilClass )  
> or simply  
> var == nil  
> ?
> 
> I have the feeling that kind\_of?(NilClass) is more “proper”/“clean”  
> but then again it decreases the readability and might not even be  
> necessary.

The other suggested checks are cleaner IMHO. There is only ever one  
instance of NilClass (see below) so you can immediately check against  
that or use method #nil?.

You cannot create other instances:

irb(main):001:0\> NilClass.new  
NoMethodError: undefined method `new' for NilClass:Class from (irb):1 from /usr/local/bin/irb19:12:in`’  
irb(main):002:0\> NilClass.allocate  
TypeError: allocator undefined for NilClass  
from (irb):2:in `allocate' from (irb):2 from /usr/local/bin/irb19:12:in`’  
irb(main):003:0\>

> Are there any situations where it makes sense to subclass NilClass?

Unlikely.

So, in an attempt to sum this up. This is what you can do ordered from  
what I’d consider most reasonable to least reasonable:

if var.nil? # test for identity  
if var == nil # test for equivalence  
if var.equal? nil # test for identity  
unless var # note: will also catch false  
if NilClass === var # superfluous type check  
if var.kind\_of? NilClass # superfluous type check

Kind regards

robert
