Loops


Visual Basic includes three major types of loops: For . . . Next, For Each . . . Next, and Do . . . Loop. Just as conditions allow you to break up the sequential monotony of your code through branches, loops add to the usefulness of your code by letting you repeat a specific block of logic a fixed or variable number of times.

For . . . Next Loops

The most common loop structure is the For . . . Next loop. This loop uses a numeric counter that increments from a starting value to an ending value, processing the code within the loop once for each incremented value.

Dim whichMonth As Integer For whichMonth = 1 To 12    ProcessMonthlyData(whichMonth) Next counter 


This sample loops 12 times (1 to 12), once for each month. You can specify any starting and ending values you wish; this range can also be specified using variables or functions that return numeric values. Once the starting and ending values are obtained, they are not recalculated each time through the loop, even if a function call is used to obtain one or both limits.

' ----- Month(Today) returns the numeric month '       for the current date. For whichMonth = 1 To Month(Today)    ProcessMonthlyData(whichMonth) Next counter 


Normally, the loop increments by one (1) each time through. You can alter this default by attaching a Step clause to the end of the For statement line.

For countDown = 60 To 0 Step -1    ... Next countDown 


One additional syntax variation allows you to declare the loop counter variable within the statement itself. Such variables are available only within the loop, and cease to exist once the loop exits.

For whichMonth As Integer = 1 To 12    ProcessMonthlyData(whichMonth) Next whichMonth 


For Each . . . Next Loops

A variation of the For loop, the For Each . . . Next loop, scans through a set of ordered and related items, from the first item until the last. Arrays and collection objects also work, as does any object that supports the IEnumerable interface (all these topics are covered in Chapter 6). The syntax is quite similar to the standard For statement.

For Each oneRecord In setOfRecords    ProcessRecord(oneRecord) Next oneRecord 


Do . . . Loop Loops

Sometimes you want to repeat a block of code as long as a certain condition is true, or only until a condition is true. The Do . . . Loop structure performs both of these tasks. The statement includes a While or Until clause that specifies the conditions for continued loop processing. For instance, the following statement does some processing for a set of dates, from a starting date to an ending date.

Dim processDate As Date = #1/1/2000# Do While (processDate < #2/1/2000#)    ' ----- Perform processing for the current date.    ProcessContent(processDate)    ' ----- Move ahead to the next date.    processDate.AddDays(1) Loop 


Processing in this sample will continue until the processDate variable exceeds 2/1/2000, which indicates the end of processing. The Until clause version is somewhat similar, although with a reversed condition result.

Do Until (processDate >= #2/1/2000#)    ... Loop 


Make the included condition as simple or as complex as you need. Putting the Until or While clause at the bottom of the loop guarantees that the statements inside of the loop will always be processed at least once.

Do    ... Loop Until (processDate >= #2/1/2000#) 


There is another loop that is similar to Do . . . Loop called the While . . . End While loop. However, it exists for backward compatibility only. Use the Do . . . Loop statement instead.

Exit Statements

Normally, when you enter a loop, you have every intention of looping for the full number of times specified by the initial conditions of the loop. For For loops, you expect to continue through the entire numeric range or collection of elements. In Do loops, you plan to keep the loop going as long as the exiting condition has not yet been met. But there may be loops that you want to exit early. You accomplish this using an Exit statement.

There are two loop-specific exit statements.

  • Exit For. Exits a For . . . Next or For Each . . . Next loop immediately.

  • Exit Do. Exits a Do . . . Loop statement immediately.

Each Exit statement exits the loop that contains the statement; processing continues with the line immediately following the loop.

For whichMonth = 1 To 12    If (ProcessMonthlyData(whichMonth) = False) Then Exit For Next whichMonth ' ----- Code continues here no matter how the loop was exited. 


The following sample is designed to loop through all 12 months. However, a processing failure for any of the 12 months will immediately exit the loop, abandoning all remaining month processing actions. The Exit Do statement similarly exits Do . . . Loop loops immediately.

When using an Exit loop statement within nested loops (where one loop appears within another), only the matching loop that immediately contains the statement is exited.

For whichMonth = 1 To 12    For whichDay = 1 to DaysInMonth(whichMonth)       If (ProcessDailyData(whichMonth, whichDay) = False) _          Then Exit For    Next whichDay    ' ----- The Exit For statement jumps to this line.    '       Processing continues with the next month. Next whichMonth 


Continue Statements

Because exiting a loop abandons all remaining passes through the loop, you may miss out on importing processing that would have happened in subsequent passes. Visual Basic includes a Continue statement that lets you abandon only the current pass through the loop.

There are different Continue statement variations for each of the loop types.

  • Continue For. Immediately jumps to the end of the For . . . Next or For Each . . . Next loop and prepares for the next pass. The loop variable is incremented and compared with the range limits.

  • Continue Do. Immediately jumps to the end of the Do . . . Loop statement and prepares for the next pass. The Until or While condition is reevaluated.

Because the loop conditions are reevaluated when using the Continue statements, there are times when Continue may cause the loop to exit, such as when it had been the final pass through the loop already.

In this example, the Continue For statement skips processing for months that have no data to process.

For whichMonth = 1 To 12    If (DataAvailable(whichMonth) = False) The Continue For    RetrieveData(whichMonth)    ProcessData(whichMonth)    SaveData(whichMonth) Next whichMonth 





Start-to-Finish Visual Basic 2005. Learn Visual Basic 2005 as You Design and Develop a Complete Application
Start-to-Finish Visual Basic 2005: Learn Visual Basic 2005 as You Design and Develop a Complete Application
ISBN: 0321398009
EAN: 2147483647
Year: 2006
Pages: 247
Authors: Tim Patrick

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net