循环语句

在不少实际问题中有许多具有规律性的重复操作, 因此在程序中就需要重复执行某些语句.

Z1h 语言提供了以下几种类型循环处理语句

示例 循环类型 描述
for {…} 无限循环 无限执行代码块内的逻辑,使用流程控制语句打破循环为止
for (xxx) {…} 单个条件循环 当xxx(变量或表达式)为真时循环
for (var i = 0; i < 10; i++) {…} 经典循环体 for(单次表达式;条件表达式;末尾循环体),条件表达式为假时跳出
for (k, v in map) {…} 遍历map键值对 遍历map的内容, k为键, v为值
for (ind, ele in arr) {…} 遍历数组 遍历arr的内容, ind为索引, ele为元素

此外还有forEach/map/filter/filterMap/asyncMap等数组自带的方法可以对数组进行遍历

请注意, Z1h语言的循环语句代码块不能为空

无限循环

a = 0
for {
    a++
    print('Output:', a)
    if (a == 10)
        break
}

单个条件循环

b = 15
for b {
    b--
    print('Output:', b)
}

经典循环

for (var i = 0; i < 5; i++) {
    print(`${i} 的3次方为 ${i**3}`)
}

遍历map

people = {
    name: 'zwr',
    age: 22,
}
for (k, v in people) {
    print(`属性${k}, 值${v}`)
}

遍历结构体

req = new(net_http.Request, {method: 'POST'})
for (k, v in req) {
    print(`属性${k}, 值${v}`)
}

遍历并发安全map

m = new(sync.Map)
m.zh = '中文'
m.en = '英文'
for (k, v in m) {
    print(`简写=${k}, 含义=${v}`)
}

遍历数组

arr = [8, 9, 10]
for (ind, ele in arr) {
    print(`第${ind+1}个元素为: ${ele}`)
}

break

可以打断for等循环, 例如

for (i = 0; i < 10; i++) {
    print(i)
    if (i == 4)
        break
}

break多层

例如你有for嵌套循环, 并且需要打断外层for循环时, 可以使用break 层数的方式进行打断

for (x = 0; x < 10; x++) {
    for (y = 0; y < 10; y++) {
        print(`X = ${x}, Y = ${y}`)
        if (y == 4)
            break 2 // 可以去掉"2"试试看有什么区别
    }
}

continue

可以打断for的本次循环, 直接进入下次循环, 例如

for (i = 0; i < 3; i++) {
    print(i, 'Hello')
    if (i == 1)
        continue
    print(i, 'Hi') // 唯独跳过了1 Hi, 并且不打断后续的2输出
}

continue多层

例如你有for嵌套循环, 并且需要continue外层for循环时, 可以使用continue 层数

for (x = 0; x < 3; x++) {
    for (y = 0; y < 3; y++) {
        print(`One: X = ${x}, Y = ${y}`)
        if (y == 1)
            continue 2 // 可以去掉"2"试试看有什么区别
        print(`Two: X = ${x}, Y = ${y}`)
    }
}