开关盒

Dart 有一个 switch case,可以用来代替 long if-else 语句:

var command = 'OPEN';

switch (command) {
  case 'CLOSED':
    executeClosed();
    break;
  case 'OPEN':
    executeOpen();
    break;
  case 'APPROVED':
    executeApproved();
    break;
  case 'UNSURE':
    // missing break statement means this case will fall through
    // to the next statement, in this case the default case
  default:
    executeUnknown();
}

你只能比较整数,字符串或编译时常量。比较对象必须是同一个类的实例(而不是其任何子类型),并且该类不能覆盖==。

Dart 中切换的一个令人惊讶的方面是非空案例子句必须以休息结束,或者不太常见,继续,抛出或返回。也就是说,非空案件条款不能落空。你必须显式结束非空案例子句,通常是中断。如果省略 break,continue,throw 或 return,则会收到静态警告,并且代码将在运行时在该位置出错。

var command = 'OPEN';
switch (command) {
  case 'OPEN':
    executeOpen();
    // ERROR: Missing break causes an exception to be thrown!!

  case 'CLOSED': // Empty case falls through
  case 'LOCKED':
    executeClosed();
    break;
}

如果你想要在非空的 case 中使用,你可以使用 continue 和一个标签:

      var command = 'OPEN';
      switch (command) {
        case 'OPEN':
          executeOpen();
          continue locked;
locked: case 'LOCKED':
          executeClosed();
          break;
      }