Just Another Victim of the Ambient Morality
10/4/2006 11:38:00 PM
Just to add to a very good response to the original post...
<gwtmp01@mac.com> wrote in message
news:59496518-3925-4E74-9B6E-B45A8C3B7E02@mac.com...
>
> On Oct 4, 2006, at 3:39 PM, Kevin Olemoh wrote:
>
>> Hello I have been using ruby off and on for a few months and I have
>> been having a great time with the language but a few things bother me
>> about the syntax of the language itself. The two glaring issues are:
>>
>> 1. The syntax errors generated by the following code:
>>
>> a.each
>> do
>> #stuff
>> end
>>
>> for reasons I do not understand ruby demands that, that line be written
>> as:
>> a.each do
>> #stuff
>> end
>
> Blocks are part of the syntax of a method call (do/end or {})
> Blocks are optional.
> Newlines terminate statements.
>
> The net result of those three things is that:
>
> a.each
>
> is considered a syntactically valid and complete statement. Leaving
> Ruby to try
> to interpret
>
> do
> #stuff
> end
The following code:
a.each
do
#stuff
end
...is the equivalent of to:
a.each; # note the optional statement terminator...
do
#stuff
end
> as the next statement, which fails. If Ruby executes 'a.each' (without
> the
> block) you'll get a runtime exception. It is correct syntax, but 'each'
> insists
> that it be called with a block.
>
> You could of course give a hint to the parser that you want to continue
> the statement:
>
> a.each > do
> #stuff
> end
>
> but escaping the newline in this case doesn't improve the readability
> (IMHO).
>
>> 2. What is with the elseif syntax specifically why is it elsif instead
>> of elseif when ruby already has an else keyword? I can't count how
>> many times I got errors because I decided to type elseif instead of
>> elsif while doing something with an if statement. I can name at least
>> two popular languages that use elseif not to mention the fact that if
>> English is your first language you will probably spell out else without
>> even realizing it since that is the correct way to spell the word in
>> English. Yes I know its a minor thing but if no one voices their
>> gripes how do people know something might need a bit of tweaking? :)
>
> I doubt a survey of languages would come up with any sort of consistency
> for the keyword in this case, so you are basically asking why doesn't
> Ruby use the same syntax for the particular languages that you are
> familiar with, which seems like a somewhat arbitrary expectation and one
> that could never be satisfied for everyone.
>
> I'm not a parsing/grammar expert, but I also suspect there is some
> benefit to keywords not being prefixes of other keywords so that 'else'
> and 'elseif' create more parsing issues than 'else' and 'elsif'. I'm
> sure someone else could elaborate on that thought.
In fact, Ruby has deep Perl roots, which is why so much of its syntax
is so Perl-like (just note its regular expressions). Perl uses "elsif"
and, thus, so does Ruby. Personally, I don't like it either but what can
you do...