执行指定次数的语句块。
FOR [<idCounter> := <nStart> | VAR <idCounter> := <nStart> | LOCAL <idCounter> := <nStart> AS <idType> ] [TO | UPTO | DOWNTO] <nEnd> [STEP <nDelta>]
<Statements>...
[EXIT]
<Statements>...
[LOOP]
NEXT
在 FoxPro 和 Xbase++ 方言中,ENDFOR 可替代 NEXT
<idCounter> | 循环控制变量或计数变量的名称。 如果包含 LOCAL 或 VAR 子句,则在循环期间创建局部变量。使用 VAR 子句时,数据类型将根据使用情况推断。 |
AS <idType> | 指定数据类型。如果省略,编译器依据编译选项来决定数据类型,或者是 USUAL,或者是由编译器自行决定。 |
<nStart> | 分配给 <idCounter> 的初始值。 如果循环是向上计数,<nStart> 必须小于 <nEnd>。 如果循环是向下计数,<nStart> 必须大于 <nEnd>。 |
TO <nEnd> | <idCounter> 的最终值。 TO 子句可用于向上或向下计数,这取决于 STEP 子句给出的 <nDelta> 值是正值还是负值。 但请注意,如果避免使用 TO 子句,而是指定 UPTO 或 DOWNTO,代码效率会更高。 |
UPTO <nEnd> | <idCounter> 的最终值。 UPTO 子句用于向上计数。 |
DOWNTO <nEnd> | <idCounter> 的最终值。 DOWNTO 子句用于倒计时。 |
STEP <nDelta> | 循环的每次迭代都会改变 <idCounter> 的值。 如果与 TO 子句一起使用,<nDelta> 可以是正值或负值。 使用 UPTO 和 DOWNTO 时,<nDelta> 应为正值。 如果未指定 STEP 子句,则循环每迭代一次,<idCounter> 就递增一次(如果是 DOWNTO,则递减一次)。 |
EXIT | 无条件地跳出 FOR、FOREACH、REPEAT 或 DO WHILE 循环,执行 ENDDO 或 NEXT 语句之后的语句。 |
LOOP | 将控制转移到最近执行的 FOR、FOREACH、REPEAT 或 DO WHILE 语句。 |
控制结构从 <idCounter> 的初始值循环到 <nEnd> 指定的边界,在控制变量的取值范围内移动,增量由 <nDelta> 指定。 循环的每次迭代都要重新评估 FOR 语句中的所有表达式。 因此,<nStart> 和 <nEnd> 值可以随着控制结构的运行而改变。
FOR 循环一直运行到 <idCounter> 大于或小于 <nEnd>(取决于是向上计数还是向下计数)或遇到 EXIT 语句为止。 然后,控制将分支到相应 NEXT 语句后面的语句。 如果遇到 LOOP 语句,控制会分支回当前的 FOR 语句。
控制结构可以嵌套到任意深度。 唯一的要求是每个控制结构都要正确嵌套。
提示 虽然 FOR 循环对遍历数组很有用(如下例所示),但如果有一个相应的数组函数来实现你想要的功能,你的代码会更有效率。
此示例以升序遍历数组:
nLenArray := ALen(aArray)
FOR i := 1 UPTO nLenArray
<Statements>...
NEXT
按降序遍历数组:
nLenArray := ALen(aArray)
FOR i := nLenArray DOWNTO 1
<Statements>...
NEXT
AEval(), BEGIN SEQUENCE, DO CASE, DO WHILE, IF, EXIT, LOOP