Iteration

Iteration is the process of performing some action on a collection of elements, one at a time. It is most commonly expressed using some form of loop syntax.

Iterative processes can also be expressed using recursion. This is often a more elegant way to express an algorithm. However, it is typically more resource-intensive, and harder for first-time programmers to grasp.

This article is to help you choose an appropriate programming construct, but listing different types of loop, and giving a brief description of each. For more detail, see individual articles on the different loops.

Loop Constructs [ ]

For [ ]

The For loop executes a given number of times, incrementing a counter each time it runs. The counter is checked before each run of the loop to ensure that the boundary value is respected. This is the most intuitive kind of loop, and is one of the first constructs used by many beginning programmers.

typical syntax [ ]

for i = 1 to 10 print i next i 

when to use it [ ]

For Each [ ]

The For Each loop will call a collection object in the correct manner to obtain child objects one at a time. It will ensure that you get each object once and once only, although it is not usually possible to guarantee any kind of ordering. This is a very neat construct, which is present in most modern languages. It is a big code-saver!

typical syntax [ ]

 for each obj in myCollection print obj.name next 

when to use it [ ]

While [ ]

The While loop checks a condition each time before it runs the commands inside the loop. Often, the actions performed within the loop are updating data which affect the condition.

While loops are also often used when waiting for something to happen outside of the currently executing process. E.g. user input or another kind of interrupt, message or event.

typical syntax [ ]

 while datetime.now < #01 jan 2000# print "it's not the new millennium yet" wend 

when to use it [ ]

Do While [ ]

The Do while loop is almost identical to the While loop, except that it checks its condition at the end of each loop. This means that it always executes the commands in the loop at least once.

typical syntax [ ]

 do mailFound = checkForMail() while not mailFound 

A Do While loop is the same as a Do Until loop, except that the condition is reversed.

when to use it [ ]

Choosing an Iterative Construct [ ]

Which form of loop is most suitable to solve a given problem? Sometimes, there is no "best" solution. However, the different constructs have nuances which lend themselves to different specific situations. This will depend on whether you need to execute the loop a fixed number of times (for loop), whether you're executing the loop once for each of a collection of objects, or whether or not you need to execute the loop at all, depending on a condition.

Warning: Common Bug [ ]

A very common bug in loops (especially while and do. while loops) is not putting commands inside the loop to update the data underlying the condition. If the condition is always true, the loop will run forever. If you have a process which hangs, one of the first things to check for is an infinite loop.

Example searching a list for a match (non-termination bug):

 i = 1 while i < list.length if list(i) == searchValue then return(i) end if wend 

This code will never terminate unless the searchValue is found in the first item of the list. The corrected code is below.

Example searching a list for a match (non-termination bug fixed):

 i = 1 while i < list.length if list(i) == searchValue then return(i) else i = i + 1 end if wend