if statement modifier, with else, warning

G

Gary Hasson

The following statement works fine, even though it generates a warning.
With regard to "if" and "unless" being used as statement modifiers, a
manual states: "Obviously, this syntax does not allow any kind of else
clause."

compare_files unless @filename_1 == nil or @filename_2 == nil else
@messagetextctrl.append_text(" ==> Please specify files to compare.
\n")

Error Msg: "...rb:112: warning: else without rescue is useless"

Obviously, the statement can be changed to the normal "if-else-end"
format, but that would not be as Ruby-ish as the above approach.

Is there a good reason why Ruby should not allow "else" to be used as in
the example above?

Gary
 
M

Marnen Laibow-Koser

Gary said:
The following statement works fine, even though it generates a warning.
With regard to "if" and "unless" being used as statement modifiers, a
manual states: "Obviously, this syntax does not allow any kind of else
clause."

compare_files unless @filename_1 == nil or @filename_2 == nil else
@messagetextctrl.append_text(" ==> Please specify files to compare.
\n")

Error Msg: "...rb:112: warning: else without rescue is useless"

Obviously, the statement can be changed to the normal "if-else-end"
format, but that would not be as Ruby-ish as the above approach.

What would be un-Rubyish about not using the statement modifier? The
normal syntax would be far clearer here.
Is there a good reason why Ruby should not allow "else" to be used as in
the example above?

Because it would lead to confusing code. Statement modifiers are fine
for the simplest cases, but toss in any complexity and you've got chaos.

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
(e-mail address removed)
 
R

Robert Klemme

The following statement works fine, even though it generates a warning.
With regard to "if" and "unless" being used as statement modifiers, a
manual states: "Obviously, this syntax does not allow any kind of else
clause."

compare_files unless @filename_1 == nil or @filename_2 == nil else
@messagetextctrl.append_text(" ==> Please specify files to compare.
\n")

Error Msg: "...rb:112: warning: else without rescue is useless"

Obviously, the statement can be changed to the normal "if-else-end"
format, but that would not be as Ruby-ish as the above approach.

Is there a good reason why Ruby should not allow "else" to be used as in
the example above?

It's a syntax error because of the ambiguity:

robert@fussel ~
$ allruby -ce 'puts 1 if 2 > 0 else puts 3'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
-e:1: syntax error, unexpected kELSE, expecting $end
puts 1 if 2 > 0 else puts 3
^
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-cygwin]
-e:1: syntax error, unexpected keyword_else, expecting $end
puts 1 if 2 > 0 else puts 3
^

Btw, I believe you might have another issue in your code because of the
precedence of "or". It might be safer to use "||" or proper bracketing.

Kind regards

robert
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top