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: Matthew Heaney Subject: Re: Software landmines (loops) Date: 1998/09/01 Message-ID: #1/1 X-Deja-AN: 386663465 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> <35EB1706.22E7E52E@draper.com> NNTP-Posting-Date: Mon, 31 Aug 1998 20:50:09 PDT Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-09-01T00:00:00+00:00 List-Id: Tim McDermott writes: > 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. I find that mentally reasoning about the behavior of this program is more difficult. When the first test is finished, I have to do mental work to make sure that, if isEqual is false, no code gets executed prior to reaching my destination, which is the end of the subprogram. This is mental work I wouldn't have to do had I just returned immediately, knowing that the stack depths were different.