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: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public From: Matthew Heaney Subject: Re: Software landmines (loops) Date: 1998/09/02 Message-ID: #1/1 X-Deja-AN: 387061923 Sender: matt@mheaney.ni.net References: <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@ <904556531.666222@miso.it.uq.edu.au> <6sgror$je8$3@news.indigo.ie> <6sh3qn$9p2$1@hirame.wwa.com> <6simjo$jnh$1@hirame.wwa.com> NNTP-Posting-Date: Wed, 02 Sep 1998 00:58:36 PDT Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-09-02T00:00:00+00:00 List-Id: "Robert Martin" writes: > Finally, I contend that the factors in favor of using a > single-entry/single-exit style are, on the other hand, quite concrete > and demonstrable. I contend that the factors in favor of using multiple returns are quite concrete and demonstrable. My argument concerns the complexity of the decision table for the loop predicate. Adding a flag doubles the number of states. > It has been shown that adhering to a structured style facilitates both > resource management and error processing. It has been shown that this is a specious argument. Automatic finalization of a controlled object guarantees that resources get released, no matter how or when the subprogram or loop terminates. > It has also been shown that a multiple exit style is vulnerable to > redundant code, and code for recovery of state. Without being able to exit from the middle of a loop, I'd have to do this to terminate a read sequence: Get (N); while N /= 0 loop Get (N); end loop; So it's the structured approach which causes the redundancy, becuase Get must be called twice. Using the an exit from the middle: loop Get (N); exit when N = 0; end loop; eliminates the redundancy. > So, it seems what we have here is "gut feelings" warring against > empirical data. I can understand why the gut reaction is so strong; > multiple exits are *eaiser* to write; and are, for some, easier to > read. But those are not the only, or even the most important, > criteria for evaluating the quality of a design. Maintainability is > an issue too, and sometimes an overriding one. But Robert, this isn't just "gut reaction." Researchers empirically demonstrated that programmers using an exit from the middle produced fewer errors: Cognitive Strategies and Looping Constructs: An Empirical Study Soloway, Bonar, Ehrlich CACM, Nov 83, Vol 26, No 11, p853-860 Yes, indeed, multiple exits are easier to write, because that construct has a better cognitive fit. I don't find your maintenance argument convincing. You seem to be arguing that we should all wear six-fingered gloves, because some day we might grow another finger. I have provided examples that mitigate any resource management issues that would arise because of early termination. These are techniques you'll have to use anyway, because of unhandled exceptions. > In the end, the decision to use a structured style is a tradeoff. There are > benefits, and there are costs. And there are certainly situations in which > the costs outweight the benefits (e.g. quick an dirty programs that have > short lifetimes and require little maintenance during their life). It is > also true, however, that for a very large set of circumstances, the benefits > outweigh the costs. I am not convinced by your argument about higher maintenance costs. I am convinced by real data that shows real programmers made more real mistakes when using the approach you advocate. Here's the reference one more time: Cognitive Strategies and Looping Constructs: An Empirical Study Soloway, Bonar, Ehrlich CACM, Nov 83, Vol 26, No 11, p853-860