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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fac41,9a0ff0bffdf63657 X-Google-Attributes: gidfac41,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public X-Google-Thread: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public From: claveman@inetworld.net (Charles H. Sampson) Subject: Re: Software landmines (loops) Date: 1998/10/02 Message-ID: <1dgane6.16owv2g7g8ov8N@u2n207167116151.inetworld.net>#1/1 X-Deja-AN: 397280586 References: <6qfhri$gs7$1@nnrp1.dejanews.com> <35cb8058.645630787@news.ne.mediaone.net> <902934874.2099.0.nnrp-10.c246a717@news.demon.co.uk> <6r1glm$bvh$1@nnrp1.dejanews.com> <6r9f8h$jtm$1@nnrp1.dejanews.com> <6renh8$ga7$1@nnrp1.dejanews.com> <6rf59b$2ud$1@nnrp1.dejanews.com> <6rfra4$rul$1@nnrp1.dejanews.com> <35DBDD24.D003404D@calfp.co.uk> <6sbuod$fra$1@hirame.wwa.com> <35f51e53.48044143@news.erols.com> <6sdiav$e0g$1@hirame.wwa.com> <6sfcft$70p$1@hirame.wwa.com> <1dg8p3r.vfredh1aou58iN@n207167116191.inetworld.net> <6v2nr9$t8l$1@hirame.wwa.com> X-Trace: news2.randori.com 907395415 207.167.116.151 (Fri, 02 Oct 1998 23:16:55 PDT) NNTP-Posting-Date: Fri, 02 Oct 1998 23:16:55 PDT Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-10-02T00:00:00+00:00 List-Id: Robert C. Martin wrote: > Charles H. Sampson wrote in message > <1dg8p3r.vfredh1aou58iN@n207167116191.inetworld.net>... > >Robert Martin wrote: > > > >> Stephen Leake wrote in message ... > >> >If there is only one 'exit' statement, why is this bad? > >> > > >> >loop > >> > ... stuff > >> > exit when ; > >> > ... stuff > >> >end loop; > >> > > >> >One entry, one exit. Perfectly clear. There's nothing magic about > >> >putting the exit statement at the top or the bottom! > >> > >> In fact there is. If the exit condition is at the top or the bottom, > then > >> the body of the loop will always be excuted an exact integral number of > >> times. However if the loop condition is in the middle, then the loop > body > >> will be executed a fractional number of times. > > > > Well, this is certainly a twist to me. I was taught the n-and-a- > >half loop as an example of the inadequacy of loop structures in most > >programming languages. Now it seems that everything has been turned > >around 180 degrees and there is some sort of software principle (in some > >peoples' minds) that the entire body of a loop must execute "an exact > >integral number of times." As another responder has pointed out (not in > >these words), in the presence of conditional statements it's not clear > >what this condition means. My guess is that it's this: Every statement > >immediately in the loop body executes on every iteration of the loop. > >If this is an accurate statement of this new principle, my immediate re- > >sponse is: So what? Why should we care? > > The question that the post was addressing had to do with the definition of > structured programming. A mid exit loop does not fall within the bounds > defined by structured programming because the loop body does not then have a > single entry and a single exit. But it does. Just look. That's not a for-loop or a while-loop. It's a loop that can only be executed with an exit statement and it has just one. (Yes, an exception can cause it to exit too, but gimme a break.) The problem everybody is chewing on has from time to time led me to propose an Ada programming style: No exit statements in for-loops and while-loops. (The precise statement is a little more complicated.) With this restriction, the termination conditions of for-loops and while-loops are clear. Any loop that can't reasonably be expressed that way is to be written as an "infinite" loop with exit statement(s). Un- fortunately, the neatness of the loop index in Ada, self-declaring with its scope being the loop itself, is a siren song that I haven't been able fully to resist. Incidentally, my meaning of "can't reasonably be expressed" in the previous paragraph uses the maintenance programmer as a frame of refer- ence. There have been a number of charges of "You're only interested in what makes writing the code easy for you" thrown around in this thread. I always program for the maintenance programmer, even when that mainte- nance programmer is going to be me. Charlie -- To get my correct email address, replace the "claveman" by "csampson" in my fake (anti-spam) address.