控制流程语句进行循环
语法
For iterator [ As datatype ] = startvalue To endvalue [ Step stepvalue ]
[ statement block ]
Next [ iterator ]
参数
iterator
用于从初始值迭代到结束值的变量标识符
datatype
如果指定,变量iterator 将自动声明为类型为datatype
startvalue
表示迭代器的起始值的表达式
endvalue
用于与迭代器的值进行比较的表达式
stepvalue
每次迭代后添加到迭代器的表达式
说明
这个
For...Next循环将
iterator 初始化为
startvalue ,然后执行
statement block ,增加
iterator stepvalue 直到超过
endvalue .如果
stepvalue 未明确指定,则设置为
1.
stepvalue 和
endvalue 的值在执行
For语句后立即内部存储,因此在
For循环内也不能更改。诸如<和>的比较运算符将不会生效
stepvalue 或
endvalue ,因为在循环运行时不会重新计算表达式。(用于定义它们的表达式的结果可能会更改,但这些更改不会影响
For循环的执行。)请参见示例。
注意:在某些方言中,在循环结束时,保留
stepvalue 和
endvalue 的临时变量超出范围,并且在执行循环后的任何代码后,其值不能保证不变。因此,建议不要从
For...Next循环(使用
Goto或类似的方式)分支出来,然后在
-lang fb 或
-lang deprecated 方言中跳回到中间。
迭代器必须是内在的标量:只能使用变量和局部变量
Static/
Shared不能使用其他类型,包括数组元素,UDT成员,
ByRef参数或任何类型的取消引用地址。
可以使用
As datatype语法定义
iterator 与
For语句的范围相同的范围。使用此语法,
iterator 将在
For...Next范围内创建并销毁。请参阅下面的方言差异。
如果
endvalue 小于
startvalue ,则必须指定否定
stepvalue ,否则
statement block 将不会执行,因为
startvalue 比较大于
endvalue .
statement block 语句导致执行
statement block 中的语句,直到
iterator endvalue (或
少于endvalue (如果
stepvalue < 0))进行比较。
iterator 将在每次执行
statement block 之后递增
stepvalue .如果没有给出增量,
iterator 将隐式递增
1.
如果在
statement block 内遇到
ExitFor语句,则循环将被终止,并且在封闭的
Next语句之后立即恢复执行。如果遇到
ContinueFor语句,则会跳过
statement block 的其余部分,直到该块的相应
Next语句为止。如果计数器的值仍然在
endvalue 给出的范围内,则计数器的值将递增,循环重新启动。
注意:对于整数数据类型,不可能循环到可以存储在变量类型中的最高可能值(或到最低可能值),因为循环只有当增量变量超过
endvalue ,永远不会发生。例如,如果您尝试将变量从
0迭代到
255,则该变量只有在变量达到
256或更多时才会中断。对于计数器使用
UByte变量将不起作用,因为尽管数字
0可以保存为
255,但它不能持有
256.请参阅
Standard Data Type Limits以查找标准数据类型的上限和下限。
像所有控制流语句一样,
For语句可以嵌套,也就是说,它可以在另一个
For语句的语句块中使用。
For ,
Next 和
Step 是可以在用户定义的类型内重载的运算符。见
操作符 For,
操作符 Next,
操作符 Step
例子
Print "从3到0,步长为-0.5"
For i As Single = 3 To 0 Step -0.5
Print "我是" & i
Next i
Dim As Integer i, j, k, toTemp, stepTemp
j = 9: k = 1
For i = 0 To j Step k
j = 0: k = 0 ''改变j和k对当前循环没有影响。
Print i;
Next i
Print
'在内部,这是上面的例子:
j = 9: k = 1
i = 0: toTemp = j: stepTemp = k
Do While IIf(stepTemp >= 0, i <= toTemp, i >= toTemp)
j = 0: k = 0 ''改变j和k对当前循环没有影响。
Print i;
i += stepTemp
Loop
Print
方言差异
与QB差别
参考