IT@程序员猿媛

第5章 Dart基础语法 -- 条件控制和循环控制

2019-05-10  本文已影响22人  yangsg

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;
}

运行结果是:


运行结果

类似于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;
}

其运行结果为:

运行结果
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);
}

运行结果


运行结果
2.2 for...in

相当于Java语言中的for...each句式,主要用于数组和集合的遍历

List a = [1,2,3];
for(dynamic x in a){
  print(x);
}

运行结果


运行结果
2.3 forEach

定义在List,Set等集合中的方法,使用方式

List a = [1,2,3];
a.forEach((x) => print(x));

运行结果


运行结果
2.4 while

与Java语言中的while循环类似

var i = 5;
while(i > 0){
  print(i);
  i--;
}

运行结果


运行结果
2.5 do...while

与Java语言中的while循环类似,无论如何do中的代码至少会被执行一次

int i = 5;
do{
  print(i);
  i++;
}while(i > 8);

运行结果


运行结果
2.6 continue和break

与Java语言中的continue和break用法类似

示例:轮空能被3整除的数字

for(int i = 1; i < 5; i++){
  if(i % 3 == 0){
    continue;
  }
  print(i);
}

运行结果


运行结果

示例:直到找到第一个被3整除的数字

for(int i = 1; i < 5; i++){
  if(i % 3 == 0){
    print(i);
    break;
  }
  print(i);
}

运行结果


运行结果
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节)

上一篇 下一篇

猜你喜欢

热点阅读