jonab@sdcrdcf.UUCP (05/31/84)
In article <1980@mit-eddie.UUCP> gds@mit-eddie.UUCP (Greg Skinner) writes: >My feelings on the matter is that those are the only two conditions where a >goto should be used (when trying to break out of a deeply-nested loop >and when trying to handle some condition). You can do both of these in the Ada* Programming Language quite easily without using a single goto: EXAMPLE 1: procedure TEST; J: INTEGER; begin .... LOOP1: loop .... LOOP2: for I in 1..10 loop .... LOOP3: while j < 10 loop .... exit LOOP1 when j = 5; -- exit all loops if j = 5 .... exit LOOP2; -- unconditionally exit LOOP2 .... exit; -- exit innermost loop LOOP3 .... end loop; .... end loop; .... end loop; .... end TEST; EXAMPLE 2: with TEXT_IO; use TEXT_IO; procedure COPY_FILE(INPUT: FILE_TYPE; OUTPUT: FILE_TYPE); C: character; begin loop GET(INPUT, C); PUT(OUTPUT, C); end loop; exception when END_ERROR => -- end of file null; -- we are done, so do nothing end COPY_FILE; *Ada is a Trademark of the Ada* Joint Programming Office, Department of Defense. Jon Biggar {allegra,burdvax,cbosgd,hplabs,ihnp4,sdccsu3}!sdcrdcf!jonab
gds@mit-eddie.UUCP (Greg Skinner) (06/06/84)
[miss me ... i know you'll miss me] I remember the time I was confronted by a decision whether or not to use gotos -- I was programming in Pascal under VMS (no flames, please) and I had to write a program that extracted various information from source files. I was used to programming in CLU which has very good exception handling -- you can catch the end-of-file signal. Anyway, Pascal under VMS had no such exception handling, and I forgot. My program would work ok as long as it found its data, but when it was given programs where the sought-after data was not there, it reached end-of-file and bombed in a most undignified way (with one of those %PAS-E-ERRFIL or one of those disgusting VMS error messages). Well, I was in a dither, because I knew no way of handling this end-of-file condition cleanly (I refused to put booleans in my code) save by using a goto in front of every routine that accessed the file. I was very dismayed, because I had always been taught "use of goto considered harmful". Anyhow, I sweated over this decision for about a day or so, then went to my supervisor and begged permission to use gotos. Well, he just laughed at me for a while, and then said ok. Since then, I haven't written any Pascal code, and have only used a goto once (to exit from deep within a nested loop in a C program). My feelings on the matter is that those are the only two conditions where a goto should be used (when trying to break out of a deeply-nested loop and when trying to handle some condition). Generally speaking, though, it isn't a good thing to do. As a matter of fact, the Pascal book I used to teach myself (I forget the name but I think it was by Peter Greenberg and I think it was called Programming in PASCAL) says that it is ok to use gotos as handlers for exceptions such as end-of-file, but nothing else. -- Let fly the bits! Greg Skinner (White Gold Wielder) {decvax!genrad, eagle!mit-vax, whuxle, ihnp4}!mit-eddie!gds And he who wields white wild magic gold is a paradox ...