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: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public From: Tim McDermott Subject: Re: Software landmines (loops) Date: 1998/08/31 Message-ID: <35EB1706.22E7E52E@draper.com>#1/1 X-Deja-AN: 386570171 Content-Transfer-Encoding: 7bit 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> Content-Type: text/plain; charset=us-ascii Organization: CSDL-DC Mime-Version: 1.0 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: > Here's is something I whipped up for another post recently. It's an > equality operator for a bounded stack. > > The implementation of the function has multiple returns. > > Does this implementation fit your definition of spaghetti code? > > Would the implementation be better by not using multiple returns? > > 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. How about this: function "=" (L, R : Stack_Type) return Boolean is begin Boolean isEqual = True; Positive Index = 1; if L.Top /= R.Top then isEqual = False; end if; while Index < L.Top && isEqual loop if L.Items (Index) /= R.Items (Index) then isEqual = False; end if; Index++; end loop; return isEqual; end "="; What Dykstra was getting at with single entance, single exit is that you can attempt to reason about the programs that are well structured. In the second version, you can make assertions about pre- and post-conditions. In fact they jump out of the loop test. That is not the case with the first version. Tim