Gox语言中实现的循环与分支都是比较简单,也比较好理解的。唯一需要注意的是else if需要写作“elif”,其他的基本与Go语言类似。
下面引自Qlang的Github页面,
for 语句
for { // 无限循环,需要在中间 break 或 return 结束
...
}
for booleanExpr { // 类似很多语言的 while 循环
...
}
for initExpr; conditionExpr; stepExpr {
...
}
典型例子:
for i = 0; i < 10; i++ {
...
}
另外Gox也支持 for…range 语法:
for range collectionExpr { // 其中 collectionExpr 可以是 slice, map 或 chan
...
}
for index = range collectionExpr {
...
}
for index, value = range collectionExpr {
...
}
条件分支则主要是if…else…与switch两种分支方式:
if 语句
if booleanExpr1 {
// ...
} elif booleanExpr2 {
// ...
} elif booleanExpr3 {
// ...
} else {
// ...
}
switch 语句
switch expr {
case expr1:
// ...
case expr2:
// ...
default:
// ...
}
或者:
switch {
case booleanExpr1:
// ...
case booleanExpr2:
// ...
default:
// ...
}
下面是使用Anko引擎时的循环与分支写法。
Gox语言中,实现的循环主要是for循环,条件分支则支持if…else…与switch语句,相对比较简单,看一下下面的例子就可以大致了解了。
i = 0
for {
println(i)
i++
if i > 1 {
break
}
}
println("")
for i in [0, 1] {
println(i)
}
println("")
for key, value in {"a": "b"} {
println(key, value)
}
println("")
m = {"a": "b", "c": 3}
for k in keys(m) {
println(k, m[k])
}
println("")
i = 0
for i < 2 {
println(i)
i++
}
println("")
for i = 0; i < 2; i++ {
println(i)
}
println("")
for i = 0; i < 10; i++ {
println(i)
if i < 1 {
continue
}
break
}
println("")
for i in range(7) {
if i > 2 && i < 5 {
println(i)
} else {
printfln("not in range: %v", i)
}
}
println("")
aryT = [3, "abc", true, 2.8]
for v in aryT {
printf("v: %v ", v)
switch v {
case typeOf(v) == "bool":
println("is bool:", v)
case typeOf(v) == "string":
println("is string")
case 2.8, 3:
println("is number")
default:
println("unknown:", v)
}
}
虽然只支持for循环,但利用for循环的几种写法,基本可以支持其他语言中的do…while…,until等循环的写法了,也支持对数组或映射的遍历。
switch语句也实现的很简单,甚至不支持break,也不支持fallthrough。
这段代码的执行结果为:
λ gox scripts\loopAndIf.gox
0
1
0
1
a b
a b
c 3
0
1
0
1
0
1
not in range: 0
not in range: 1
not in range: 2
3
4
not in range: 5
not in range: 6
v: 3 is number
v: abc is string
v: true is bool: true
v: 2.8 is number
由于Gox语言支持动态类型,因此switch语句可能会因此带来一些问题,使用时需要注意一下。