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=0.7 required=5.0 tests=BAYES_00,INVALID_MSGID, PDS_OTHER_BAD_TLD 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: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public From: "Robert Martin" Subject: Re: Software landmines (loops) Date: 1998/08/31 Message-ID: <6sf87j$47n$1@hirame.wwa.com>#1/1 X-Deja-AN: 386599657 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> X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Organization: WorldWide Access - Midwestern Internet Services - www.wwa.com Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-08-31T00:00:00+00:00 List-Id: Matthew Heaney wrote in message ... > >Would the implementation be better by not using multiple returns? Yes. Imagine that you had to change the function to make it thread safe; and that the way to do that was to sieze and release a mutex while the function was executing. As written you would have to add the release in three separate places. But if you had avoided the multiple returns, you would have had a single release. > > >function "=" (L, R : Stack_Type) return Boolean is >begin > > if L.Top /= R.Top then > return False; > end if; > > for Index in Positive range 1 .. L.Top loop > if L.Items (Index) /= R.Items (Index) then > return False; > end if; > end loop; > > return True; > >end "="; > > >My feeling is that trying to implement this operation using only a >single return would just make it more complicated. Well, let's see: (in C++) bool operator==(Stack& l, Stack& r) { bool equal = true; for (int index = 1; index < l.top() && equal == true; index++) { if (l[index] != r[index]) equal = false; } return equal; } If this is more complex (something that is arguable) it is not *much* more complex. On the other hand, it is easier to maintain. The thread-safety issue I talked about above would be easier to add to this function than to the one with multiple returns. Robert C. Martin | Design Consulting | Training courses offered: Object Mentor | rmartin@oma.com | Object Oriented Design 14619 N Somerset Cr | Tel: (800) 338-6716 | C++ Green Oaks IL 60048 | Fax: (847) 918-1023 | http://www.oma.com "One of the great commandments of science is: 'Mistrust arguments from authority.'" -- Carl Sagan