comp.lang.ada
 help / color / mirror / Atom feed
From: Matt Borchers <mattborchers@gmail.com>
Subject: Re: stopping a loop iteration without exiting it
Date: Fri, 5 Jan 2018 16:26:45 -0800 (PST)
Date: 2018-01-05T16:26:45-08:00	[thread overview]
Message-ID: <7b8a1da2-c405-4cbc-9c0b-1fef804c9239@googlegroups.com> (raw)
In-Reply-To: <bc57c2d8-ed05-4e8b-b7db-440984976364@googlegroups.com>

I would like to also put my voice in for a 'next [when condition]' statement.  It is also my opinion that in some cases it is more readable.  I would avoid 'continue' only because it is a C term.  The use of 'goto' in a loop to act like a next by jumping to the END of the loop seems more like a hack and I agree with the sentiment that it adds more confusion for the reader.

Regarding performing a sequence of statements conditionally after a loop comes up quite a bit in my experience.  In our proprietary language we have a loop...then...end loop construct.  The 'then' block executes when the loop terminates normally (not terminated by an 'exit').  This can be useful when you want to do some action following the loop only when the loop runs 'cleanly' and it avoids having to create a Boolean flag variable to set in the loop with the addition of an 'if' statement and then have to test the flag following the loop with another 'if' block.

A similar situation occurs frequently with exceptions.  I would like to see a 'finally' block added after the 'when' conditions that runs after any handler is run.

begin
...
exception
  when EX1 => ...
  when EX2 => ...
  when others => ...
finally
...
end;

This would allow programmers to handle common cleanup operations that would otherwise have to be duplicated in every exception case.  This is mostly useful if the code was going to re-raise the exception or return control to the caller in the exception handler.  Control would be returned to the caller after the 'finally' block if it exists otherwise the program flow behaves as it does now.

These three examples, 'next', loop...'then'...end, 'finally', all allow the programmer to produce constructs without having to introduce extraneous variables, blocks, or sub-routines to track state which, in my opinion, can often make the code more difficult to read.

  parent reply	other threads:[~2018-01-06  0:26 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03 16:54 stopping a loop iteration without exiting it Mehdi Saada
2018-01-03 17:23 ` Lucretia
2018-01-03 21:19   ` Randy Brukardt
2018-01-03 23:17     ` Robert A Duff
2018-01-04  8:47       ` Niklas Holsti
2018-01-05  1:31         ` Randy Brukardt
2018-01-04 10:08       ` Jeffrey R. Carter
2018-01-04 11:02         ` Dmitry A. Kazakov
2018-01-04 19:46           ` Robert A Duff
2018-01-04 20:47             ` Mehdi Saada
2018-01-04 21:17             ` Dmitry A. Kazakov
2018-01-04 23:08               ` Niklas Holsti
2018-01-05  8:38                 ` Dmitry A. Kazakov
2018-01-06 16:50                   ` Niklas Holsti
2018-01-06 17:20                     ` Dmitry A. Kazakov
2018-01-07 11:36                       ` Niklas Holsti
2018-01-07 12:05                         ` Dmitry A. Kazakov
2018-01-07 21:22                           ` Niklas Holsti
2018-01-08  8:35                             ` Dmitry A. Kazakov
2018-01-08 20:57                       ` Randy Brukardt
2018-01-08 21:19                         ` Dmitry A. Kazakov
2018-01-08 21:48                           ` Submitting requests to the ARG, was: " Simon Clubley
2018-01-09  9:45                             ` Dmitry A. Kazakov
2018-01-08 22:35                         ` Jeffrey R. Carter
2018-01-05 16:34               ` Robert A Duff
2018-01-05 19:09                 ` G. B.
2018-01-07 11:52               ` Niklas Holsti
2018-01-07 12:27                 ` Dmitry A. Kazakov
2018-01-06  0:53           ` Keith Thompson
2018-01-06  8:36             ` Dmitry A. Kazakov
2018-01-06  8:49               ` gautier_niouzes
2018-01-06  9:26                 ` Dmitry A. Kazakov
2018-01-08 11:05                 ` mockturtle
2018-01-09 11:05               ` AdaMagica
2018-01-09 11:26                 ` Dmitry A. Kazakov
2018-01-09 12:50                   ` Simon Wright
2018-01-09 13:07                     ` Dmitry A. Kazakov
2018-01-09 13:47                       ` Dennis Lee Bieber
2018-01-09 14:53                         ` Dmitry A. Kazakov
2018-01-09 20:07                           ` G. B.
2018-01-10  8:13                             ` Dmitry A. Kazakov
2018-01-10 21:14                               ` G. B.
2018-01-11 12:48                                 ` AdaMagica
2018-01-11 20:54                                   ` G. B.
2018-01-11 13:06                                 ` Dmitry A. Kazakov
2018-01-11 17:11                                   ` Simon Wright
2018-01-11 17:30                                     ` Dmitry A. Kazakov
2018-01-11 18:09                                       ` Simon Wright
2018-01-11 20:54                                   ` G. B.
2018-01-12  8:20                                     ` Dmitry A. Kazakov
2018-01-12  9:22                                       ` G. B.
2018-01-12  9:42                                         ` Dmitry A. Kazakov
2018-01-10 10:52                       ` AdaMagica
2018-01-10 11:14                         ` Dmitry A. Kazakov
2018-01-10 11:21                           ` AdaMagica
2018-01-10 13:47                             ` Dmitry A. Kazakov
2018-01-04 21:52         ` Mart van de Wege
2018-01-05 13:17           ` Jeffrey R. Carter
2018-01-05 14:35             ` Mart van de Wege
2018-01-05 15:21               ` Jeffrey R. Carter
2018-01-05 19:13                 ` Paul Rubin
2018-01-05 23:50                   ` Randy Brukardt
2018-01-06  1:19                   ` G. B.
2018-01-06  9:59                   ` Jeffrey R. Carter
2018-01-05  1:17         ` Randy Brukardt
2018-01-05 14:05           ` Jeffrey R. Carter
2018-01-05 23:58             ` Randy Brukardt
2018-01-04 12:43     ` gautier_niouzes
2018-01-03 17:28 ` Jeffrey R. Carter
2018-01-03 18:27 ` Mehdi Saada
2018-01-06  0:26 ` Matt Borchers [this message]
2018-01-06 22:04   ` J-P. Rosen
2018-01-07  2:05     ` Matt Borchers
2018-01-08 20:49   ` Randy Brukardt
2018-01-07 11:33 ` Mehdi Saada
2018-01-07 11:45   ` Simon Wright
2018-01-08  0:58   ` Matt Borchers
2018-01-07 17:47 ` Micah Waddoups
2018-01-07 21:04   ` Simon Wright
2018-01-23  3:49 ` Robert Eachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox