Continue

From Free Pascal wiki
Revision as of 17:49, 13 July 2021 by Kai Burghardt (talk | contribs) (refactor, emphasize that the condition is reevaluated, mention MacPas cycle)
Jump to navigationJump to search

Deutsch (de) English (en)

The continue (pseudo) routine effectively skips the remainder of the loop body for one iteration, thus jumping back (or forward) to the loop head. It is a non-standardized extension.

Continue, with its special meaning of terminating one iteration, can only be written within loops. It is not a reserved word, therefore you could use it as an identifier, but still access the special routine by writing its fully qualified identifier system.continue. In {$mode MacPas} the cycle statement is an alias for continue.

application

The use of continue is usually disfavored since it “delegitimizes” the loop’s condition expression. If the number of iterations can be predicted before the loop starts, it is even considered bad style to use continue. Instead it is highly recommended to improve the algorithm. Nevertheless, in the case of unpredictable data, and thus an unpredictable number of (complete) iterations, continue is generally acceptable.

program continueDemo(input, output, stdErr);
var
  i, sum: integer;
begin
  sum := 0;
  writeLn('Enter some positive numbers, line by line:');
  
  //       ┌─────────────────────────────────┐
  //       ↓ next iteration: check condition │
  while not eof do                        // │
    begin                                 // │
      readLn(i);                          // │
                                          // │
      if i < 1 then                       // │
        begin                             // │
          writeLn('Hey! Stay positive!'); // │
          continue; // → ────────────────────┘
        end;
      
      {$push}
      {$rangeChecks off}
      sum := sum + i;
      {$pop}
      if sum < 0 then
        begin
          writeLn('I can’t handle that much positivity.');
          halt(1);
        end;
    end;
  
  writeLn('The sum of all your positive numbers is ', sum, '.');
  writeLn('I like that positivity.');
end.

After and at continue (or cycle in {$mode MacPas}) the program jumps back, or in the case of repeat  until forward, to the loop’s condition. The respective condition must be satisfied again before another iteration occurs.

see also