Table of Contents

8.3 The do-while Loop

As we saw earlier, a while statement allows the interpreter to execute a block of code repeatedly while a specified condition remains true. Due to a while loop's structure, its body will be skipped entirely if the loop's condition is not met the first time it is tested. A do-while statement lets us guarantee that a loop body will be executed at least once with minimal fuss. The body of a do-while loop always executes the first time through the loop. The do-while statement's syntax is somewhat like an inverted while statement:

do {
  substatements
} while (condition);

The keyword do begins the loop, followed by the substatements of the body. On the interpreter's first pass through the do-while loop, substatements are executed before condition is ever checked. At the end of the substatements block, if condition is true, the loop is begun anew and substatements are executed again. The loop executes repeatedly until condition is false, at which point the do-while statement ends. Note that a semicolon is required following the parentheses that contain the condition.

Obviously, do-while is handy when we want to perform a task at least once and perhaps subsequent times. In Example 8-2 we duplicate a series of twinkling-star movie clips from a clip called starParent and place them randomly on the Stage. Our galaxy will always contain at least one star, even if numStars is set to 0.

Example 8-2. Using a do-while loop
var numStars = 5;
var i = 1;
do {
  // Duplicate the starParent clip
  duplicateMovieClip(starParent, "star" + i, i);
  // Place the duplicated clip randomly on stage
  _root["star" + i]._x = Math.floor(Math.random() * 551);
  _root["star" + i]._y = Math.floor(Math.random() * 401);
} while (i++ < numStars);

Did you notice that we sneakily updated the variable i in the test expression? Remember from Chapter 5 that the post-increment operator both returns the value of its operand and also adds 1 to that operand. The increment operator is very convenient (and common) when working with loops.


Table of Contents