The third way
you can jump around in a looping block is with
redo
. This construct causes a jump to the
beginning of the current block (without reevaluating the control
expression), like so:
while (somecondition
) { # redo comes heresomething
;something
;something
; if (somecondition
) {somestuff
;somestuff
; redo; }morething
;morething
;morething
; }
Once again, the if
block doesn’t
count—just the looping blocks.
With redo
, last
, and a naked
block, you can make an
infinite loop
that exits out of the middle, like so:
{startstuff
;startstuff
;startstuff
; if (somecondition
) { last; }laterstuff
;laterstuff
;laterstuff
; redo; }
This logic would be appropriate for a while
-like
loop that needed to have some part of the loop executed as
initialization before the first test. (In a later section entitled
“Expression Modifiers,” we’ll show you how to write
that if
statement with fewer punctuation
characters.)