【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());
像 List
和 Set
等,我們同樣可以使用 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
如果像 List
或 Set
一樣實現了 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