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
and
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 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 the upcoming section
"Expression Modifiers
," we'll show you how to write that
if
statement with fewer punctuation characters.)