From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!gandalf.srv.welterde.de!news.jacob-sparre.dk!loke.jacob-sparre.dk!pnx.dk!.POSTED!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: if-then-no-else Programming Date: Tue, 19 Apr 2016 14:51:05 -0500 Organization: JSA Research & Innovation Message-ID: References: <1mlx1gf.ebrae11jak5tyN%csampson@inetworld.net> NNTP-Posting-Host: rrsoftware.com X-Trace: loke.gir.dk 1461095465 5985 24.196.82.226 (19 Apr 2016 19:51:05 GMT) X-Complaints-To: news@jacob-sparre.dk NNTP-Posting-Date: Tue, 19 Apr 2016 19:51:05 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 Xref: news.eternal-september.org comp.lang.ada:30200 Date: 2016-04-19T14:51:05-05:00 List-Id: "Charles H. Sampson" 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 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. Randy.