25.62. FOR var=exp_start TO exp_stop [ STEP exp_step ]
Implements a FOR loop. The variable var gets the value of the start expression exp_start, and after each execution of the loop body it is incremented or decrement by the value exp_step until it reaches the stop value exp_stop.
FOR var= exp_start TO exp_stop [ STEP exp_step] ... commands to repeat ... NEXT var
The STEP part of the command is optional. If this part is missing then the default value to increment the variable is 1.
- the expression exp_start is larger than the expression exp_stop and exp_step is positive or if
- the expression exp_start is smaller than the expression exp_stop and exp_step is negative
then the loop body is not executed even once and the variable retains its old value.
When the loop is executed at least once the variable gets the values one after the other and after the loop exists the loop variable holds the last value for which the loop already did not execute. Thus
for h= 1 to 3 next print h stop
The expression exp_start is evaluated only once when the loop starts. The other two expressions exp_stop and exp_step are evaluated before each loop. Thus
j = 1 k = 10 for h= 1 to k step j print h,"\n" j += 1 k -= 1 next print k," ",j,"\n" stop
1 3 6 7 4
To get into more details the following example loop
STEP_v = 5 for z= 1 to 10 step STEP_v print z,"\n" STEP_v -= 10 next z
executes only once. This is because the step value changes its sign during the evaluation and the new value being negative commands the loop to terminate as the loop variable altered value is smaller then the end value. In other words the comparison also depends on the actual value of the step expression.
These are not only the expressions that are evaluated before each loop, but the variable as well. If the loop variable is a simple variable then this has not too much effect. However if the loop variable is an array member then this really has to be taken into account. For example:
for j=1 to 9 A[j] = 0 next j = 1 for A[j]= 1 to 9 for k=1 to 9 print A[k] next k print j += 1 if j > 9 then STOP next
100000000 110000000 111000000 111100000 111110000 111111000 111111100 111111110 111111111
so you can see that the loop takes, evaluates, compares and increments the actual array element as the variable j in the sample code above is incremented.
The loop variable or some other left value has to stand between the keyword FOR and the sign = on the start line of the loop but this is optional following the keyword NEXT. ScriptBasic optionally allow you to write the variable name after the keyword NEXT but the interpreter does not check if the symbol is a variable of the loop. The role of this symbol is merely documentation of the BASIC code. However, you can not write an array element following the keyword NEXT, only a simple variable name.
If the expression exp_step is zero then the loop variable is not altered and the loop is re-executed with the same loop variable value. This way you can easily get into infinite loop.
These are fine tuning details of the command FOR that you may need to be aware when you read some tricky code. On the other hand you should never create any code that depends on these features. The loop variable is recommended to be a simple variable and the expressions in the loop head should evaluate the same for each execution of the loop. If you need something more special that may depend on some of the features discussed above then you have to consider using some other looping construct to get more readable code.