1. 程式人生 > 實用技巧 >【Flutter 1-8】Flutter教程Dart語言——控制語句

【Flutter 1-8】Flutter教程Dart語言——控制語句

作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)

控制語句

Dart語言的控制語句跟其他常見語言的控制語句是一樣的,基本如下:

  • if 和 else
  • for 迴圈
  • while 和 do-while 迴圈
  • break 和 continue
  • switch 和 case
  • assert
If 和 Else

Dart 支援 if - else 語句,其中 else 是可選的,比如下面的例子。

int i = 0;
if (i == 0) {
  print("value 0");
} else if (i == 1) {
  print("value 1");
} else {
  print("other value");
}

如果要遍歷的物件實現了 Iterable 介面,則可以使用 forEach() 方法,如果不需要使用到索引,則使用 forEach 方法是一個非常好的選擇:

Iterable介面實現了很多方法,比如說 forEach()、any()、where()等,這些方法可以大大精簡我們的程式碼,減少程式碼量。

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());

ListSet 等,我們同樣可以使用 for-in

形式的 迭代:

var collection = [1, 2, 3];
for (var x in collection) {
  print(x); // 1 2 3
}
While 和 Do-While

while 迴圈會在執行迴圈體前先判斷條件:

var i = 0;
while (i < 10) {
  i++;
  print("i = " + i.toString());
}

do-while 迴圈則會先執行一遍迴圈體 再 判斷條件:

var i = 0;
do {
  i++;
  print("i = " + i.toString());
} while (i < 10);

Break 和 Continue

使用 break 可以中斷迴圈:

for (int i = 0; i < 10; i++) {
  if (i > 5) {
    print("break now");
    break;
  }
  print("i = " + i.toString());
}

使用 continue 可以跳過本次迴圈直接進入下一次迴圈:

  for (int i = 0; i < 10; ++i) {
    if (i < 5) {
      continue;
    }
    print("i = " + i.toString());
  }

上述程式碼中的 candidates 如果像 ListSet 一樣實現了 Iterable 介面則可以簡單地使用下述寫法:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].where((i) => i > 5).forEach((i) {
  print("i = " + i.toString());
});
Switch 和 Case

Switch 語句在 Dart 中使用 == 來比較整數、字串或編譯時常量,比較的兩個物件必須是同一個型別且不能是子類並且沒有重寫 == 操作符。 列舉型別非常適合在 Switch 語句中使用。
每一個 case 語句都必須有一個 break 語句,也可以通過 continue、throw 或者 return 來結束 case 語句。
當沒有 case 語句匹配時,可以使用 default 子句來匹配這種情況:

  var command = 'OPEN';
  switch (command) {
    case 'CLOSED':
      print('CLOSED');
      break;
    case 'PENDING':
      print('PENDING');
      break;
    case 'APPROVED':
      print('APPROVED');
      break;
    case 'DENIED':
      print('DENIED');
      break;
    case 'OPEN':
      print('OPEN');
      break;
    default:
      print('UNKNOW');
  }

但是,Dart 支援空的 case 語句,如下:

var command = 'CLOSED';
switch (command) {
  case 'CLOSED': // case 語句為空時的 fall-through 形式。
  case 'NOW_CLOSED':
    // case 條件值為 CLOSED 和 NOW_CLOSED 時均會執行該語句。
    print(command);
    break;
}
斷言

在開發過程中,可以在條件表示式為 false 時使用 - assert, 來中斷程式碼的執行,提示出錯誤。你可以在本文中找到大量使用 assert 的例子。下面是相關示例:

// 確保變數值不為 null (Make sure the variable has a non-null value)
assert(text != null);

// 確保變數值小於 100。
assert(number < 100);

// 確保這是一個 https 地址。
assert(urlString.startsWith('https'));
assert 的第二個引數可以為其新增一個字串訊息。

assert(urlString.startsWith('https'),'URL ($urlString) should start with "https".');

assert 的第一個引數可以是值為布林值的任何表示式。如果表示式的值為true,則斷言成功,繼續執行。如果表示式的值為false,則斷言失敗,丟擲一個 AssertionError 異常。

注意:
在生產環境程式碼中,斷言會被忽略,與此同時傳入 assert 的引數不被判斷。

本文所有程式碼都已上傳到Github