Kenneth McDonald
8/31/2007 3:25:00 AM
The title is intentionally (but semiseriously) contentious, but I'm not
trying to say that Ruby is a bad language--I'm using it, right :-) ?
However, any language has its unfortunate share of bad APIs, design
decisions, etc., and Ruby is no exception. I've stumbled across a few,
and thought it might be useful to start up a thread discussing what
people view as Ruby's stupidities. Why? Because it's a lot less painful
to find out about them by reading them than be tracking obscure errors
in one's code.
In order to keep this on a not-completely-shouting-match level, I think
it's fair to give a reason something you mention as a Ruby Stupidity is
in fact stupid. For example, it violates common sense, it causes more
trouble than it's worth, etc. etc., and to discuss what a better way of
implementing such a feature might be.
Having said that, here's my first entry. I think it's utterly stupid
(can you tell I just wasted some time tracking this down?) that
"abc"[0] == "a"
is false. Why doesn't that work? Because, with a single index, the array
access operator on a string returns, not the character at the given
position, but the _character code_ of the character at that position.
And why is that stupid?
1) It's inconsistent even in Ruby's own String API; all other index
operations (at least as shown in the standard rdoc) give strings or nil.
2) It's unusual compared to most other scripting languages, meaning
it makes Ruby less approachable.
3) There seems to be absolutely no reason to do things this way;
providing a 'char_code' string method would result in clearer programs,
and it's not like converting a character to a char code is such a common
operation that it's necessary to save a few keystrokes at the cost of
unclear code.
Here's hoping someone out there avoids this mistake after reading this.
cheers,
Ken