ark@ut-sally.UUCP (Arthur M. Keller) (08/08/86)
First, let me say that I am opposed to unrestricted use of GOTOs. However, I do like the ability to prematurely exit from a construct. The argument that premature exits from constructs (FOR loops, functions, etc.) represent multiple exits from the construct is misguided. There is only one exit from the construct. There are merely multiple ways of getting there. Having an explicit exit in a construct is often better than implicitly falling through to the bottom. Consider the following way of writing the linear search using invented syntax: found := false; FOR "search foo" index := low TO high DO IF foo[index]=key THEN location := index; EXIT "search foo"; ENDIF; ENDFOR "search foo"; Semantics of naming BEGINs and ENDs: A loop may be named at either the BEGIN or the END. Both will name the block. If both are present, they must match exactly. Semantics of the EXIT construct: EXIT causes execution to continue at the end of the named BEGIN-END block if a name is specified, or at the end of the innermost BEGIN-END block if no name is specified. To implement the semantics of CONTINUE using the EXIT construct: FOR "outer" .... BEGIN "inner" EXIT "inner"; (* means CONTINUE with the next iteration of the loop *) EXIT "outer"; (* means leave the FOR loop altogether *) END "inner"; ENDFOR "outer"; An EXIT is particularly helpful for thinking like: you know you're done when abcdfefgtgf or ajsadjdfjaldjla or asdasdsadsadasd Once you make any of these true, you can exit. An EXIT is also helpful for handling exceptions and errors without unnecessarily cluttering up code to ensure than nothing is done in the event of an error. Arthur -- ------------------------------------------------------------------------------ Arpanet: ARK@SALLY.UTEXAS.EDU UUCP: {gatech,harvard,ihnp4,pyramid,seismo}!ut-sally!ark