[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Each time you code 'unless... else'...

Phlip

1/28/2008 8:50:00 PM

unless File.exist? CONF_PATH
Ultrasphinx.say "configuration file not found for #{RAILS_ENV.inspect}
environment"
Ultrasphinx.say "please run 'rake ultrasphinx:configure'"
else
begin
lines = open(CONF_PATH).readlines

sources = lines.select do |line|


....Satan waterboards a kitten.
4 Answers

Phlip

1/29/2008 8:27:00 PM

0

> unless File.exist? CONF_PATH
> Ultrasphinx.say "configuration file not found for
> #{RAILS_ENV.inspect} environment"
> Ultrasphinx.say "please run 'rake ultrasphinx:configure'"
> else
> begin
> lines = open(CONF_PATH).readlines
>
> sources = lines.select do |line|
>
> ...Satan waterboards a kitten.

Just a note - we have debugged the second bug in this library, in as many days,
and it also happened in the immediate vicinity of _another_ unless... else.

I'm picking a longhair tabby for this one.

--
Satan

Robert Klemme

1/30/2008 6:29:00 PM

0

On 29.01.2008 21:26, Phlip wrote:
>> unless File.exist? CONF_PATH
>> Ultrasphinx.say "configuration file not found for
>> #{RAILS_ENV.inspect} environment"
>> Ultrasphinx.say "please run 'rake ultrasphinx:configure'"

Isn't this rather a case for an exception?

raise "please run 'rake ultrasphinx:configure'" unless File.exists?
CONF_PATH

>> else
>> begin
>> lines = open(CONF_PATH).readlines
>>
>> sources = lines.select do |line|
>>
>> ...Satan waterboards a kitten.
>
> Just a note - we have debugged the second bug in this library, in as
> many days, and it also happened in the immediate vicinity of _another_
> unless... else.
>
> I'm picking a longhair tabby for this one.

Uh...

robert

Phlip

1/30/2008 7:27:00 PM

0

Robert Klemme wrote:

> Isn't this rather a case for an exception?
>
> raise "please run 'rake ultrasphinx:configure'" unless File.exists?
> CONF_PATH

(I didn't write it, but) absolutely. That would have prevented me debugging down
to it.

There's a reason professors of BDUF techniques used to say a routine should have
a single entry and a single exit. The reason is not the exit count itself.
Applying the rule forces you to examine and clean up your control flow, between
that entry and exit.

Robert Klemme

1/31/2008 5:06:00 PM

0

On 30.01.2008 20:27, Phlip wrote:
> There's a reason professors of BDUF techniques used to say a routine
> should have a single entry and a single exit. The reason is not the exit
> count itself. Applying the rule forces you to examine and clean up your
> control flow, between that entry and exit.

I am not a big fan of that rule. Multiple exits can come in handy, for
example when doing this:

# superfluous in Ruby of course
def find(enum, x)
enum.each do |elm|
return elm if x == elm
end
nil
end

Avoiding multiple exits can lead to increased indentation because you
might need more control constructs.

Especially in programming languages with exceptions the "single exit"
rule is pretty useless - unless you do not count exceptions.

Kind regards

robert