開關盒

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