Dart语言【004】控制流程语句

本文介绍了Dart语言的基础语法,包括条件判断语句、开关语句、循环语句及跳转语句等内容,并通过示例代码详细解释了if语句、switch语句、for循环、while循环等的使用方法。

1. 条件判断语句

1.1 if语句

if语句的用法与其他语言没什么区别。

void Func(int n) {
  if (n > 0) {
    print("正数");
  } else {
    if (n == 0) {
      print("零");
    } else {
      print("负数");
    }
  }
}

值得一提的是,在检查模式下,if的条件表达式的值的类型必须是bool或bool的派生类,否则会引发异常(exception);在生产模式下,if的条件可以接受任何类型,但任何既非bool又非bool派生类的类型的变量一律被视为false。

if (1) { // 检查模式下引发异常;生产模式下等价于 if (false)

}

你没有看错,1被视为了false。


2. 开关语句

2.1 switch语句

switch语句格式如下:

switch (e) {
  case 常量表达式1:
  case 常量表达式1:
  ......
  case 常量表达式n:
  default:
}

其中e为一个表达式。设e的类型为T,则T必须是重载了operator==的。我将在后面的章节中介绍运算符重载,如果你接触过C++或C#等有运算符重载的语言,则很容易理解这个东西。没接触过也没关系,你可以暂时这么理解:设t1和t2都是T类型的变量,则表达式t1 == t2是合法的。

2.2 switch语句的性质

1)非空的case,在执行完之后必须以break、return、throw的方式结束switch,或者,用continue语句来执行另一个case(后文介绍continue语句);

2)空的case,可以直接贯穿下去。

void Func(int n) {
  switch (n) {
    case 1: // 空的case,可以贯穿下去
    case 2:
    case 3: // 非空的case
      print("n为1、2或3");
      break;
    case 4: // 空的case,当然也可以用break结束switch
      break;
    default:
      break;
  }
}


3. 循环语句

3.1 for语句

Dart的for语句类似于C语言的,没有什么特别之处。

for (int i = 0; i < 10; i++) {
  print(i);
}

3.2 forEach函数

Dart并未像很多语言那样提供“foreach语句”,但对于List和Map类型,Dart提供了forEach成员函数。

List<T>类型有成员函数forEach:

// Dart源码不是这么搞的,但可以这么理解:
class List<T> {
  void forEach(void f(T t));
}

forEach接受一个以(T t)为参数列表,无返回值的函数。

void main() {
  List<int> theList = [1, 3, 2, 90];
  theList.forEach(Op);
}

void Op(int n) {
  print(n);
}

Map<K, V>类型有成员函数forEach:

// Dart源码不是这么搞的,但可以这么理解:
class Map<K, V> {
  void forEach(void f(K key, V value));
}


3.3 while语句

while可以看成是简化版的for。

while (x) {
  // 代码
}

相当于:

for (; x;) {
  // 代码
}

3.4 do-while语句

do-while和while的区别在于,一个先判断,一个先执行一次,然后再判断。这个和C语言是一样的。例子就不给了。


4. 跳转语句

break与continue

break与continue的用法与C语言等常见编程语言中是一样的:continue结束本次循环,break结束整个循环。

另外continue语句可以用在switch中,以达到执行完一个非空case之后继续执行另一个case的目的。

void Func(int n) {
  switch (n) {
    case 1:
      print("case 1");
      continue Label_; // 执行完case 1之后,继续执行case 2
    Label_: case 2:
      print("case 2");
      break;
    case 3:
      print("case 3");
      break;
    default:
      print("default");
      break;
  }
}

其中Label_的作用是为一个case添加标签,以便为continue语句指明跳转的位置。

转载于:https://my.oschina.net/jthmath/blog/417475

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值