2.4 流程控制 – 《简单易懂的Dart》

2.4.1 if…else语句

Dart的if语句和其他语言里的if语句没多大差别,它的写法可以说是和JavaScript一模一样.

if语句中一共只有2个关键词,if和else,其中else可以和if组合使用.

下面是一个简单的例子,帮助你更快理解Dart的if语句:

void main(){  
  int a=3;
  if(a===1){
    print("a=1");
  }else if(a===2){
    print("a=2");
  }else{
    print("a!=1 and a!=2");
  }
}

2.4.2 for循环

Dart的for循环照搬JavaScript的for循环,for循环的写法遵循C的标准写法.

一个输出1~100的例子:

void main(){  
  for(int a=1;a<=100;a++){
    print(a);
  }
}

2.4.3 for each循环

for each循环在Dart有两种形式,一种是标准的for in结构,另一种是类似于lambda函数的写法.

因为语法大多数照搬JavaScript的缘故,for in和JavaScript是一样的:

void main(){  
  List a=[1,2,3,4,5,6,7,8,9,10];
  for(int i in a){
    print(i);
  }
}

上面这段代码迭代了列表变量a,按顺序输出了a中的每一个对象

另一种写法没有循环体,只用一条语句:

void main(){  
  List a=[1,2,3,4,5,6,7,8,9,10];
  a.forEach((i)=>print(i));
}

这种形式的for each是基于可迭代对象的forEach方法完成的,其中(i) => print(i)是一条lambda函数.

2.4.4 while循环

Dart的while循环照搬JavaScript(我相信你们已经看烦这句话了).

这是上面for循环输出1~100的while写法:

void main(){  
  int a=1;
  while(a<=100){
    print(a);
    a++;
  }
}

2.4.5 do…while循环

Dart的do…while循环照搬JavaScript(不过出场率很低).

do…while循环是先运行循环体后判断表达式的一种循环结构.它首先执行do语句块中的语句,然后再经过while判断来确定是否再次进入循环体.

多说无益,这是输出1~100的do..while写法:

void main(){  
  int a=1;
  do{
    print(a);
    a++;
  }while(a<=100);
}

看起来和上一节中的while没什么区别,但从执行原理上看,while首先判断了a<=100为真才进入循环体,而do…while中无论a为何值都会至少进入循环体一遍.

把while和do…while的int a=1修改为int a=200就会发现明显差别.

2.4.6 break和continue

这两个都是使用在循环体中的关键字.

break表示中断,跳出当前的循环体或代码块.

continue表示跳过循环体后面的部分,直接进入下一次循环体.

2.4.7 switch…case语句

switch语句共有3个关键字,switch,case,default.

其使用方法与其他语言中也是大体相同的,这里把2.4.1节的代码用switch…case来实现一次:

void main(){  
  int a=3;
  switch(a){
    case 1:
      print("a=1");
    case 2:
      print("a=2");
    default:
      print("a!=1 and a!=2");
  }
}

输出结果为a!=1 and a!=2.程序可以正常执行,这看似没有什么问题.

现在我们把int a=3改成int a=2,按下运行的快捷键Ctrl+R.

输出窗口输出了一个FallThroughErrorImplementation异常,Dart的switch…case语句是不允许贯穿的,所以我们必须要在每个case后面加上break使其跳出switch结构.

修改过的代码如下:

void main(){  
  int a=2;
  switch(a){
    case 1:
      print("a=1");
      break;
    case 2:
      print("a=2");
      break;
    default:
      print("a!=1 and a!=2");
  }
}

再次运行Ctrl+R,输出a=2,没有任何的异常.