comp.lang.ada
 help / color / mirror / Atom feed
From: csampson@inetworld.net (Charles H. Sampson)
Subject: Re: if-then-no-else  Programming
Date: Wed, 20 Apr 2016 00:56:39 -0700
Date: 2016-04-20T00:56:39-07:00	[thread overview]
Message-ID: <1mlzbr3.1ivik7416ts9sjN%csampson@inetworld.net> (raw)
In-Reply-To: nf6279$5r1$1@loke.gir.dk

Randy Brukardt <randy@rrsoftware.com> wrote:

> "Charles H. Sampson" <csampson@inetworld.net> wrote in message 
> news:1mlx1gf.ebrae11jak5tyN%csampson@inetworld.net...
> > It's hard to believe that it's been over six years since I wrote a line
> > of code for profit. If what my son tells me, there's been what I
> > consider a major change in software engineering during that time.
> >
> > He says that there's a move to ban the use of the else-statement. The
> > preferred approach is to execute the else-part first, then change the
> > effect if the if-condition is satisfied. For example:
> >
> >   Variable := 3;
> >   if <condtion> then
> >      Variable := 1;
> >   end if;
> >
> > In addition to some other goodness attributes, this is supposed to be
> > clearer than the if-then-else form.
> >
> > Is he right? (He's not really a coder. His experience is in wire-frame
> > animation but he's being forced into coding by the job market.) If he's
> > not right, have any of you even heard of an area of the software
> > "profession" where this position is held?
> 
> This sounds like nonsense to me. It wouldn't make sense for the majority of
> the code that we have:
> 
>     if condition then
>         Do_It;
>     else -- Can't get here.
>         Internal_Error ("Impossible branch");
>     end if;
> 
> and
> 
>     if Is_Float (Expr.Typ) then
>         Generate_Float_Code (Expr.Typ);
>    else
>         Generate_Integer_Code (Expr.Typ);
>    end if;
> 
> I think if we generated both kinds of code for a float expression, we
> wouldn't have been in the compiler business for long. ;-)
> 
> Indeed, RRS has a style rule which is the exact opposite of his suggestion.
> We require either an else or a comment that no else is needed for most if
> statements. We found that we had cases like:
> 
>     if condition then
>          Do_Something;
>     end if;
> 
> and there would be a bug because nothing was done if condition was False.
> Errors of omission are the hardest things to find, and we hoped to reduce
> the number of them by at least requiring the programmer to think about all
> of the possibilities and documenting that they did so. Thus, the above would
> have to be written:
> 
>     if condition then
>          Do_Something;
>     -- else nothing needed.
>     end if;
> 
> so it's obvious that the reverse condition was considered.
> 
> There are of course cases where the suggested form would work, but even in
> those one needs to document that the else was omitted on purpose and not
> just forgotten. Otherwise, a future maintainer has to guess which case is
> involved and that can cause one to waste a lot of time on things that are
> intended.

Don't hold me to this, but I have this vague memory that somewhere back
at the beginning of Ada there was a proposal that every if-statement had
to have an else-statement. I don't remember if it was one of the early
incarnations of Ada, somebody's proposed coding style, on one of the
non-green language proposals.

The point was to indicate in the code that the possibility of the
if-condition's being false had been considered.

Charlie
-- 
Nobody in this country got rich on his own.  You built a factory--good.
But you moved your goods on roads we all paid for.  You hired workers we
all paid to educate. So keep a big hunk of the money from your factory.
But take a hunk and pay it forward.  Elizabeth Warren (paraphrased)

  parent reply	other threads:[~2016-04-20  7:56 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-19  2:24 if-then-no-else Programming Charles H. Sampson
2016-04-19  3:08 ` Dennis Lee Bieber
2016-04-19  3:19 ` Jeffrey R. Carter
2016-04-19  6:18 ` Nasser M. Abbasi
2016-04-19  7:55 ` Dmitry A. Kazakov
2016-04-19 12:17 ` G.B.
2016-04-20 22:26   ` Martin
2016-04-19 13:27 ` gautier_niouzes
2016-04-19 19:51 ` Randy Brukardt
2016-04-19 22:40   ` Shark8
2016-04-20 22:35     ` Randy Brukardt
2016-04-20  7:56   ` Charles H. Sampson [this message]
2016-04-20 11:26     ` Dennis Lee Bieber
2016-04-20 12:32       ` G.B.
2016-04-20 12:36         ` G.B.
2016-04-20 23:07     ` Jeffrey R. Carter
2016-04-19 20:32 ` Charles H. Sampson
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox