广州市天河区天河路621号天娱广场西塔10楼
与多数语言不同的是,EasyScript中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构,关键字 for 的基本使用方法与C/C++中非常接近
var sum = 0;
for( var i = 0; i < 10; i++) {
sum += i;
}
EasyScript还进一步考虑到无限循环的场景,让开发者不用写无聊的 for(;;){}和do{} while(1);,而直接简化为如下的写法:
var sum = 0;
for {
sum++;
if (sum > 100) {
break;
}
}
for 中的初始语句——开始循环时执行的语句
初始语句是在第一次循环前执行的语句,一般使用初始语句执行变量初始化,如果变量在此处被声明,其作用域将被局限在这个 for 的范围内。
初始语句可以被忽略,但是初始语句之后的分号必须要写,代码如下:
var step = 2;
for( ; step > 0; step--) {
log.Println(step);
}
这段代码将 step 放在 for 的前面进行初始化,for 中没有初始语句,此时 step 的作用域就比在初始语句中声明 step 要大。
for 中的条件表达式——控制是否循环的开关
每次循环开始前都会计算条件表达式,如果表达式为 true,则循环继续,否则结束循环,条件表达式可以被忽略,忽略条件表达式后默认形成无限循环。
下面代码忽略条件表达式,但是保留结束语句,代码如下:
var i =0;
for (; ; i++) {
if (i > 10) {
break;
}
}
代码说明如下:
- 第 2 行,无须设置 i 的初始值,因此忽略 for 的初始语句,两个分号之间是条件表达式,也被忽略,此时循环会一直持续下去,for 的结束语句为 i++,每次结束循环前都会调用。
- 第 3 行,判断 i 大于 10 时,通过 break 语句跳出 for 循环到第 7 行。
上面的代码还可以改写为更美观的写法,代码如下:
var i =0;
for {
if (i > 10) {
break;
}
i++;
}
代码说明如下:
- 第 2 行,忽略 for 的所有语句,此时 for 执行无限循环。
- 第 6 行,将 i++ 从 for 的结束语句放置到函数体的末尾是等效的,这样编写的代码更具有可读性。
无限循环在收发处理中较为常见,但需要无限循环有可控的退出方式来结束循环。
在上面代码的基础上进一步简化代码,将 if 判断整合到 for 中,变为下面的代码:
var i =0;
for (;i <= 10;) {
i++;
}
在代码第 3 行中,将之前使用
上面这段代码其实类似于其他编程语言中的 while,在 while 后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。
if i>10{}
判断的表达式进行取反,变为判断 i 小于等于 10 时持续进行循环。上面这段代码其实类似于其他编程语言中的 while,在 while 后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。
在结束每次循环前执行的语句,如果循环被 break、return等语句强制退出,结束语句不会被执行。
EasyScript中可以用for来遍历集合数据,类似于java中的for、PHP中的foreach
var arr=["hello","world"];
for(var v:arr)
{
response.echo(v);
}
运行结果:
helloworld
除对数组进行遍历外,也可以对map数据进行遍历,示例:
var m={
"blue":0,
"yellow":1,
"white":3
};
for(var k,v:m)
{
response.echo(""+k+"="+v+"\n");
}
运行结果:
blue=0
yellow=1
white=3
注意:对map数据进行遍历时,不保证遍历的顺序!上例中的输出结果也可能是
blue=0
white=3
yellow=1
要保证排序顺序的遍历,可以先将key保存到数组中,对数组进行排序,然后再遍历,示例:
var m={
"blue":0,
"yellow":1,
"white":3
};
var arr=[];
for(var k,v:m)
{
arr.Add(k);
}
arr.Sort();
for(var k:arr)
{
response.echo(""+k+"="+m[k]+"\n");
}
运行结果,顺序是确定的:
blue=0
white=3
yellow=1