for 循环

for 循环

for 循环

功能

for 用于重复执行代码、按整数区间循环、无限循环,也用于遍历数组、对象和字符串。

数组按下标和值遍历,对象按 key 和 value 遍历,字符串按字符遍历。整数次数和区间循环使用惰性迭代状态,不会提前生成完整数组。

语法

参数

参数类型必填说明
countInt循环次数,必须是非负整数。
startInt区间起点,省略时默认为 0
endInt闭区间终点,省略时表示从 start 开始无限递增。
step_valueInt正整数步长,默认 1;用于次数循环时控制当前值增量,用于区间循环时控制区间步幅。
iterableArray/Object/String/Int可遍历值;整数会按 0..count - 1 惰性循环。
keyString/Int数组和字符串为下标,对象为 key,整数次数循环为当前整数,区间为零基序号。
valueAny当前元素值;区间和整数次数循环中为当前整数。
_Empty占位索引变量

返回值

for 语句本身返回 empty。如果需要收集结果,通常先创建数组或对象,在循环体内写入。

无限循环

for {} 表示无限循环,需要在循环体内通过 breakreturnexit 退出。

重复 N 次

不需要索引时,直接写次数。

需要索引时,使用 for i in count。索引从 0 开始,到 count - 1 结束。

需要固定循环次数但让变量按指定步长递增时,使用 for i in count step step_value。下面会循环 3 次,输出 024

区间循环

start..end 是闭区间,包含左右边界。起点小于等于终点时递增,起点大于终点时递减。

..end 等价于 0..end

start.. 表示从起点开始无限递增。

step

step 用于控制 for 循环中每次迭代的变量变动幅度(步长)。次数循环会固定执行 count 次,变量从 0 开始每轮增加 step;区间循环的方向由区间起始值与结束值的大小关系自动决定。

语法

for <变量> in <次数> step <步长>

for <变量> in <区间> step <步长>

约束条件

  • step 必须为 大于 0 的整数
  • 不支持负值步长(方向由区间自动决定)

行为规则

1. 默认步长

当省略 step 时,步长默认为 1

2. 次数循环

for i in count step step_value 会执行 count 次,i 依次为 0step_valuestep_value * 2,直到达到执行次数,不会把 count 当作闭区间终点。

3. 方向自动判定

  • 正向迭代:当 起始 ≤ 结束 时,每次循环变量 增加 step
  • 反向迭代:当 起始 > 结束 时,每次循环变量 减少 step

4. 区间特性

  • 区间为 闭区间:起始值和结束值均会被迭代(若步长能精确到达)
  • 正向迭代终止条件:变量 > 结束
  • 反向迭代终止条件:变量 < 结束

示例

代码迭代序列说明
for i in 3 step 20, 2, 4循环 3 次,当前值按 2 递增
for i in 0..60, 1, 2, 3, 4, 5, 6默认步长 1,正向
for i in 0..6 step 20, 2, 4, 6步长 2,正向
for i in 6..06, 5, 4, 3, 2, 1, 0默认步长 1,反向
for i in 6..0 step 26, 4, 2, 0步长 2,反向
for i in 1..10 step 31, 4, 7, 10步长 3,正向
for i in 10..1 step 310, 7, 4, 1步长 3,反向

设计原理

step 仅定义每次迭代的变动幅度(步长绝对值)。区间循环的迭代方向完全由起始与结束的大小关系隐式决定,避免了显式指定 -2 这类负步长的冗余。

遍历集合

只关心元素本身时,写一个变量即可。

需要下标或对象 key 时,写两个变量:第一个是 key,第二个是 value。两个变量之间的逗号可写可省略。

丢弃绑定

_ 表示丢弃当前绑定,不会创建或覆盖名为 _ 的变量。

解构当前 value

当遍历数组中的对象或数组时,可以在 for 后使用括号解构当前 value,只取循环体需要的字段。

上面的写法等价于:

括号内可以使用空格或逗号分隔变量。当前 value 是 object 时按同名字段读取,是 array 时按下标读取;缺失字段或下标赋值为 empty。当前 value 不是 array 或 object 时会产生运行时错误。

break 和 continue

break 立即结束当前循环;continue 跳过本次循环剩余语句,进入下一次循环。

标签循环

嵌套循环中,可以给循环加标签,然后用 break:labelcontinue:label 控制指定层级。冒号用于明确表示后面是跳转标签,标签写在循环关键字后面,格式为 for:awhile:aloop:a

注意事项

  • for count {} 的 count 必须是非负整数;0 会执行零次。
  • for i in count {} 中的 count 为整数时,按 0..count - 1 循环;for i in count step step_value {} 会循环 count 次,i 从 0 开始按 step_value 递增。
  • 区间循环只支持整数,第一版不支持浮点 step。
  • start..end 包含 end。
  • start.. 是无限递增区间,通常需要在循环体内配合 break
  • for value in obj 仍然读取对象 value;需要对象 key 时使用 for key, value in objfor key value in obj