1. 条件控制
1.1 if
与Java语言的if语句类似
if(逻辑表达式){
执行的代码
}
当逻辑表达式结果为true时,执行方法体中的代码
当方法体中的代码只有一句时,也可以写成
if(逻辑表达式)
执行的代码
1.2 if...else...
与Java语言的if...else...语句类似
if(逻辑表达式){
执行的代码
}else{
执行的代码
}
当逻辑表达式结果为true时,执行if方法体中的代码,否则执行else方法体中的代码。
1.3 if...else if...else
与Java语言的if...else if...else...语句类似
if(逻辑表达式1){
执行的代码
}else if(逻辑表达式2){
执行的代码
}else if(逻辑表达式3){
执行的代码
}
...
else if(逻辑表达式n){
执行的代码
}else{
执行的代码
}
执行第一个逻辑表达式为true的方法体中的代码,如果所有if和else if分支的逻辑表达式结果都是false,则执行else方法体中的代码
1.4 switch
Dart语言中switch中使用“==”比较各个case分支
必须在case分支的结尾强制使用:break,continue,throw,rethrow或return结束分支
当使用break进行分支结束时,其运行机制与Java语言switch的语法是一致的
dynamic d = 4;
switch(d){
case 1: print(1);break;
case 2: print(2);break;
case 3: print(3);break;
case 4: print(4);break;
case 5: print(5);break;
default: print(0);break;
}
运行结果是:4
当使用continue进行分支控制时,需要利用标识控制,详见本章2.7
dynamic d = 4;
switch(d){
case 1: print(1);continue line2;
line2:
case 2: print(2);continue line3;
line3:
case 3: print(3);continue line4;
line4:
case 4: print(4);continue line5;
line5:
case 5: print(5);continue line0;
line0:
default: print(0);break;
}
运行结果是:
![](https://img.haomeiwen.com/i15606715/d8fa0fe1d8528c66.png)
类似于Java语言中switch语句没有写break的情况,当然也可以自行设置continue指向的标识。
比如,下面的示例通过continue指向标识后形成了一个闭环。可以理解为是一个死循环。
dynamic d = 4;
switch(d){
line1:
case 1: print(1);continue line2;
line2:
case 2: print(2);continue line3;
line3:
case 3: print(3);continue line4;
line4:
case 4: print(4);continue line5;
line5:
case 5: print(5);continue line1;
line0:
default: print(0);break;
}
其运行结果为:
![](https://img.haomeiwen.com/i15606715/a0bc5d18a498f687.gif)
1.5 assert
与C++语言中的assert断言类似,Dart语言的assert当逻辑表达式结果为false时终止程序的执行,主要用于保证数据的准确和方便debug调试。
assert(逻辑表达式);
需要注意的是,一个断言语句尽量只写一个逻辑条件。这样能确保我们知道到底是因为哪个数据出现问题造成程序中断
assert(d > 0); //验证d是否大于0
2. 循环控制
2.1 for
与Java语言中的for循环类似
for(计数初始值; 边界条件; 计数增量){
执行的代码
}
比如执行5次循环,分别输出0-4的数字
for(int i = 0; i < 5; i++){
print(i);
}
运行结果
![](https://img.haomeiwen.com/i15606715/e91cb3e9b988d174.png)
2.2 for...in
相当于Java语言中的for...each句式,主要用于数组和集合的遍历
List a = [1,2,3];
for(dynamic x in a){
print(x);
}
运行结果
![](https://img.haomeiwen.com/i15606715/b766584a588c38d4.png)
2.3 forEach
定义在List,Set等集合中的方法,使用方式
List a = [1,2,3];
a.forEach((x) => print(x));
运行结果
![](https://img.haomeiwen.com/i15606715/b766584a588c38d4.png)
2.4 while
与Java语言中的while循环类似
var i = 5;
while(i > 0){
print(i);
i--;
}
运行结果
![](https://img.haomeiwen.com/i15606715/2669a6a07821d2d4.png)
2.5 do...while
与Java语言中的while循环类似,无论如何do中的代码至少会被执行一次
int i = 5;
do{
print(i);
i++;
}while(i > 8);
运行结果
![](https://img.haomeiwen.com/i15606715/051c453fcaf332f7.png)
2.6 continue和break
与Java语言中的continue和break用法类似
- continue表示轮空本次循环,进行下一次循环
- break表示结束(跳出)整个循环
示例:轮空能被3整除的数字
for(int i = 1; i < 5; i++){
if(i % 3 == 0){
continue;
}
print(i);
}
运行结果
![](https://img.haomeiwen.com/i15606715/f6c99662bdb75c8d.png)
示例:直到找到第一个被3整除的数字
for(int i = 1; i < 5; i++){
if(i % 3 == 0){
print(i);
break;
}
print(i);
}
运行结果
![](https://img.haomeiwen.com/i15606715/6f20215f2069be29.png)
2.7 标识
标识可以理解为C语言的中设置goto语句的位置标识。
比如:与Java语言的break性质一样,Dart中的break只能直接跳出一层循环。当存在多重循环时,完整地跳出所有循环时,可以利用声明标识来指明break跳出的位置
示例:找到最小的水仙花数(三位数,各个位上数字的立方等于三位数自身)
outer:
for(int i = 1; i <= 9; i++){
for(int j = 0; j <= 9; j++){
for(int k = 0; k <= 9; k++){
if(i*i*i + j*j*j + k*k*k == 100*i+10*j+k){
print(100*i+10*j+k);
break outer;
}
}
}
}
通过“break:标识”方式可以让break直接跳出多层循环,类似的在循环和switch中,continue也可以执行“continue:标识”的方式(参考本章1.4节)
网友评论