Gox语言中的循环与分支-GX14

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语句可能会因此带来一些问题,使用时需要注意一下。

猜你喜欢

转载自blog.csdn.net/weixin_41462458/article/details/107899934