變數(Variables)
Dart 2 可以不宣告變數型別方式有兩種 var
和 dynamic
。
這兩個看似用法相同但不一樣,其中 var
會在 Compile-time 的時候就會自行判斷你賦予此變數值的型別;
所以再次賦予不同型別的值給此變數,會出現錯誤 Error: A value of type 'int' can't be assigned to a variable of type 'String'.
。
而 dynamic
則是能在 Run-time 時放進任何型別的變數。
var name = "Bobson";
// name = 123;
// Error: A value of type 'int' can't be assigned to a variable of type 'String'.
print(name);
dynamic myName = "Bobson";
print(myName);
myName = 123;
print(myName);
Bobson
Bobson
123
任何變數宣告出來沒賦予值的話,預設會給
null
int lineCount;
// default value is null
assert(lineCount == null);
流程控制(Control Flow)
在程式執行時,個別的指令(或是陳述、子程式)執行或求值的順序。
Dart 中主要,控制程式執行有以下幾種:
- if and else
- for loops
- while and do-while loops
- break and continue
- switch and case
- assert
- try-catch and throw(Exception)
If Else
在 Dart 中,If Else 的條件是必須為 true
或 false
。
int number = -5;
if (number > 0) {
print("$number 大於 0");
} else if (number < 0) {
print("$number 小於 0");
} else {
print("$number 等於 0");
}
Switch Case
Switch Case 可以與 If Else 作轉換
switch (number > 0) {
case true:
print("$number 大於 0");
break;
default:
print("$number 小於等於 0");
}
Switch Case 比較常用的方式在於,判斷多種狀態時程式碼需執行哪種對應的模式(case)。 以下載狀態舉例:
// 下載狀態的 enum
enum DownloadState {
none,
downloading,
done,
error
}
DownloadState downloadState = DownloadState.done;
switch (downloadState) {
case DownloadState.none:
print("尚未下載");
break;
case DownloadState.downloading:
print("下載中");
break;
case DownloadState.done:
print("下載完成");
break;
case DownloadState.error:
print("下載失敗");
break;
default:
throw Exception("異常狀態");
}
For loop
傳統的 for loop 的形式是 for(初始; 條件; 遞迴)
變形的 for loop 在 Dart 中像是 forEach
, map
和 for(子集 in 集合)
var collection = [];
for (var i = 0; i < 3; i++) {
collection.add(i);
}
print(collection);
collection.forEach((i) => print("${i+1}"));
print(collection.map((i) => i+1));
for (var c in collection) {
print(c);
}
[0, 1, 2]
1
2
3
(1, 2, 3)
0
1
2
While loop
int count = 0;
while (count < 5) {
count += 1;
}
print(count);
do {
count += 5;
print("count 加一次 5");
} while (count < 14);
print(count);
5
count 加一次 5
count 加一次 5
15
Break Continue
在 While loop 範例中加入 break
或 continue
,可改變程式走向。
int count = 0;
while (count < 5) {
if (count == 4) {
count += 3;
continue;
}
// continue 會忽略這行,直接進入下一個迴圈
count += 1;
}
print(count);
do {
count += 5;
print("count 加一次 5");
if (count % 2 == 0) break;
} while (count < 18);
print(count);
7
count 加一次 5
12
你也可以瞧瞧…
參考
- Dart 官方文檔 - Variables
- Dart 官方文檔 - Control flow statements
- Introduction to Dart for Beginners - Control Flow and Low Level Compilation - Part Two
系列文