

Show HN: Learn Ruby by Example with Challenges - arikrak
http://www.learneroo.com/modules/61/nodes/338

======
jeffrwells
This might be a fun challenge for experienced rubyists, but I do not think
this is a good way to learn Ruby.

I only looked at Ruby Basics, but here's my feedback:

The challenge is to solve: 'true and 0 && !nil and 3 > 2', but this is not a
real-life application.

The words 'and' and 'or' should not be used for boolean comparisons, they are
intended to be used to join two separate clauses such as "render 'template'
and return" in rails.

Comparing a number and bang-nil is not good code. This could actually come to
be if you were doing something like: "object.value && !object.value". However,
you wouldn't ever want to hardcode "0 && !nil". If you were really checking
for nil, you should use "!object.nil?"

I'm afraid that these challenges will teach bad code techniques to newbies who
don't know the difference. But again, as someone with more familiarity with
Ruby, I think these types of challenges are fun, but if that is the goal there
is no need for the tutorial beforehand.

~~~
SnacksOnAPlane
> The words 'and' and 'or' should not be used for boolean comparisons, they
> are intended to be used to join two separate clauses such as "render
> 'template' and return" in rails.

Is that true? Because I found a bug in our code recently that was in a line
like

render_error and return

where the return was never getting called because render_error returned false.
I don't understand why you would write code like that when you could simply
write:

render_error

return

and not have to deal with thinking about whether render_error could ever
return a falsey value.

------
jader201
I don't know Ruby, but this caught my eye:

    
    
      true.class #=> TrueClass
      false.class #=> FalseClass
    

Why would they have two different classes (types?) for what I consider
_values_ of a boolean/bit type?

~~~
al2o3cr
TrueClass and FalseClass aren't exactly "classes" in the usual sense - for
instance, `TrueClass.new` throws a NoMethodError.

Under the hood, true and false are singletons - `(1 == 1).object_id` will
_always_ be 20. At least in MRI / YARV, that makes booleans much cheaper in
terms of memory (a single pointer vs. a pointer + an RObject struct) but means
that they don't have their own instance methods.

Keeping the classes separate makes it possible to metaprogram additional
behavior onto true and false - for instance, the `blank?` method added by
ActiveSupport.

~~~
Argorak
Don't rely on that ;)

Ruby 1.9.3

> (1==1).object_id => 2

> (1!=1).object_id => 0

------
chucknelson
Ah, made me think of the good ol' days =>
[http://rubyquiz.com/](http://rubyquiz.com/)

Although this is definitely more tutorial-ish.

------
marsay
The design of the site looks strange to my eyes. Colors and fonts doesn't make
sense. I'm no expert on design so I can't explain why.

~~~
arikrak
Thanks for the feedback. I'm going to try to improve the design this week.

~~~
bcjordan
Shoot me a quick hello if you'd like a few suggestions, my username at gmail.

------
kartikkumar
Great! Diving head first into Ruby so this will come in handy.

------
cabbeer
Is there anything like this for Javascript?

~~~
arikrak
Since it looks like this was pretty popular, I'll make one for Javascript too.
Meanwhile, check out the original LearnXinYminutes.

~~~
arikrak
Update: See
[http://www.learneroo.com/modules/64/nodes/350](http://www.learneroo.com/modules/64/nodes/350)

