if else 的條件值必須是布林,不能是其他的型態, else 是選項。
if (isRaining()) {
you.bringRainCoat();
} else if (isSnowing()) {
you.wearJacket();
} else {
car.putTopDown();
}
var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
message.write('!');
}
如果不需要用到索引值,且需要疊代出每一個值,forEach是一個很好的方法。
List numbers = [1,2,3,4,5,6,7,8,9,10];
numbers.foreach((number)=> print(number));
功能跟forEach 一樣,可以疊代出每個值。
List numbers = [1,2,3,4,5,6,7,8,9,10];
for(var number in numbers){
print(number);
}
再循環之前先判斷條件
void main() {
var i = 7;
while (i < 10) {
print(i); //7,8,9
i++;
}
}
do-while循環是先執行循環內的程式碼再去判斷條件
void main() {
var i = 0;
do {
i++;
print(i); //1,2,3
} while (i < 3);
}
break: 中斷循環
void main() {
var x = 5;
while (true) {
if (x > 7) break;
print(x++); //5,6,7
}
}
continue: 跳過本次循環直接進入下一次循環
void main() {
var x = 5;
while (x < 10) {
x++;
if (x < 7) {
continue;
} else {
print(x); //7,8,9,10
}
}
}
void main() {
var test = 'o';
switch (test) {
case 'w': // 空case fall-through 形式
case 'x':
print('case2'); //w,x
break;
case 'y':
print('case3'); //y
continue label1; //非空case,使用continue會直接跳到label1的位置繼續執行
case 'z':
print('case4'); //z
break;
label1: //設定標籤 label1
case 'a':
print('case5'); //a, y
break;
case 'b':
print('case6'); //b
break;
default:
print('case7'); //非以上的字元皆會執行
}
}
assert 的第一個參數可以是值為布林值的expr。如果expr的值為 true,則判定成功,繼續執行。如果表達式的值為 false,則判定失敗,拋出一個 AssertionError 異常,會發生中斷,因此可以使用assert來中斷正常執行流程。第二個參數可以為其增加一個字串的訊息。
在生成程式(production code)中,assert 不會被執行,只有在測試模式中會被執行。
assert(urlString.startsWith('https'),
'URL ($urlString) should start with "https".');
異常表示發生了意外的錯誤,若沒有捕獲,程式將被終止。
常見的異常有 FormatException格式異常、HttpException網絡異常、FileSystemException操作文件的異常、IntegerDivisionByZeroException整數除以0的異常。
用於包含可能出現異常的程式碼。
用於拋出異常。
用於捕獲異常,可以防止異常繼續傳遞。除非使用了rethrow 會將捕獲的異常再次拋出。
用於捕獲指定的異常型態,如 DeferredLoadException,FormatException,IntegerDivisionByZeroException,IOException,IsolateSpawnException,OSError,TimeoutException...等等,可與 catch同时使用。
要確保程式碼能夠執行,無論是否有捕獲到異常,皆會執行finally的區段程式。
使用方式如下:
void main() {
try {
testThrow();
} on FormatException catch (e) { //指定的Exception
print('Exception :\n $e');
} on Exception catch(e){ //其它的Exception
print('Some other Exception');
} catch (e, s) { //未知的Exception
print('Exception details:\n $e');
print('Stack trace:\n $s');
} finally {
print("final");
}
}
void testThrow() {
throw Exception('myException');
}
除以零的例子如下:
void main() {
var zero = 0;
var x = 5;
try {
var y = x ~/ zero;
print('y = $y');
testThrow();
} on IntegerDivisionByZeroException catch (e) {
print('除以0異常:$e');
} catch (e, s) {
print('Exception details:\n $e');
print('Stack trace:\n $s');
} finally {
print("final");
}
}
void testThrow() {
throw Exception('myException');
}