1. 條件控制
1.1 if
與Java語言的if語句類似
if(邏輯表達(dá)式){
執(zhí)行的代碼
}
當(dāng)邏輯表達(dá)式結(jié)果為true時(shí),執(zhí)行方法體中的代碼
當(dāng)方法體中的代碼只有一句時(shí)丰榴,也可以寫成
if(邏輯表達(dá)式)
執(zhí)行的代碼
1.2 if...else...
與Java語言的if...else...語句類似
if(邏輯表達(dá)式){
執(zhí)行的代碼
}else{
執(zhí)行的代碼
}
當(dāng)邏輯表達(dá)式結(jié)果為true時(shí)咖熟,執(zhí)行if方法體中的代碼馒铃,否則執(zhí)行else方法體中的代碼开伏。
1.3 if...else if...else
與Java語言的if...else if...else...語句類似
if(邏輯表達(dá)式1){
執(zhí)行的代碼
}else if(邏輯表達(dá)式2){
執(zhí)行的代碼
}else if(邏輯表達(dá)式3){
執(zhí)行的代碼
}
...
else if(邏輯表達(dá)式n){
執(zhí)行的代碼
}else{
執(zhí)行的代碼
}
執(zhí)行第一個(gè)邏輯表達(dá)式為true的方法體中的代碼坏挠,如果所有if和else if分支的邏輯表達(dá)式結(jié)果都是false奈懒,則執(zhí)行else方法體中的代碼
1.4 switch
Dart語言中switch中使用“==”比較各個(gè)case分支
必須在case分支的結(jié)尾強(qiáng)制使用:break奠涌,continue,throw磷杏,rethrow或return結(jié)束分支
當(dāng)使用break進(jìn)行分支結(jié)束時(shí)溜畅,其運(yùn)行機(jī)制與Java語言switch的語法是一致的
dynamic d = 4;
switch(d){
case 1: print(1);break;
case 2: print(2);break;
case 3: print(3);break;
case 4: print(4);break;
case 5: print(5);break;
default: print(0);break;
}
運(yùn)行結(jié)果是:4
當(dāng)使用continue進(jìn)行分支控制時(shí),需要利用標(biāo)識(shí)控制极祸,詳見本章2.7
dynamic d = 4;
switch(d){
case 1: print(1);continue line2;
line2:
case 2: print(2);continue line3;
line3:
case 3: print(3);continue line4;
line4:
case 4: print(4);continue line5;
line5:
case 5: print(5);continue line0;
line0:
default: print(0);break;
}
運(yùn)行結(jié)果是:
類似于Java語言中switch語句沒有寫break的情況达皿,當(dāng)然也可以自行設(shè)置continue指向的標(biāo)識(shí)天吓。
比如,下面的示例通過continue指向標(biāo)識(shí)后形成了一個(gè)閉環(huán)峦椰×淠可以理解為是一個(gè)死循環(huán)。
dynamic d = 4;
switch(d){
line1:
case 1: print(1);continue line2;
line2:
case 2: print(2);continue line3;
line3:
case 3: print(3);continue line4;
line4:
case 4: print(4);continue line5;
line5:
case 5: print(5);continue line1;
line0:
default: print(0);break;
}
其運(yùn)行結(jié)果為:
1.5 assert
與C++語言中的assert斷言類似汤功,Dart語言的assert當(dāng)邏輯表達(dá)式結(jié)果為false時(shí)終止程序的執(zhí)行物邑,主要用于保證數(shù)據(jù)的準(zhǔn)確和方便debug調(diào)試。
assert(邏輯表達(dá)式);
需要注意的是滔金,一個(gè)斷言語句盡量只寫一個(gè)邏輯條件色解。這樣能確保我們知道到底是因?yàn)槟膫€(gè)數(shù)據(jù)出現(xiàn)問題造成程序中斷
assert(d > 0); //驗(yàn)證d是否大于0
2. 循環(huán)控制
2.1 for
與Java語言中的for循環(huán)類似
for(計(jì)數(shù)初始值; 邊界條件; 計(jì)數(shù)增量){
執(zhí)行的代碼
}
比如執(zhí)行5次循環(huán),分別輸出0-4的數(shù)字
for(int i = 0; i < 5; i++){
print(i);
}
運(yùn)行結(jié)果
2.2 for...in
相當(dāng)于Java語言中的for...each句式餐茵,主要用于數(shù)組和集合的遍歷
List a = [1,2,3];
for(dynamic x in a){
print(x);
}
運(yùn)行結(jié)果
2.3 forEach
定義在List科阎,Set等集合中的方法,使用方式
List a = [1,2,3];
a.forEach((x) => print(x));
運(yùn)行結(jié)果
2.4 while
與Java語言中的while循環(huán)類似
var i = 5;
while(i > 0){
print(i);
i--;
}
運(yùn)行結(jié)果
2.5 do...while
與Java語言中的while循環(huán)類似忿族,無論如何do中的代碼至少會(huì)被執(zhí)行一次
int i = 5;
do{
print(i);
i++;
}while(i > 8);
運(yùn)行結(jié)果
2.6 continue和break
與Java語言中的continue和break用法類似
- continue表示輪空本次循環(huán)锣笨,進(jìn)行下一次循環(huán)
- break表示結(jié)束(跳出)整個(gè)循環(huán)
示例:輪空能被3整除的數(shù)字
for(int i = 1; i < 5; i++){
if(i % 3 == 0){
continue;
}
print(i);
}
運(yùn)行結(jié)果
示例:直到找到第一個(gè)被3整除的數(shù)字
for(int i = 1; i < 5; i++){
if(i % 3 == 0){
print(i);
break;
}
print(i);
}
運(yùn)行結(jié)果
2.7 標(biāo)識(shí)
標(biāo)識(shí)可以理解為C語言的中設(shè)置goto語句的位置標(biāo)識(shí)。
比如:與Java語言的break性質(zhì)一樣道批,Dart中的break只能直接跳出一層循環(huán)错英。當(dāng)存在多重循環(huán)時(shí),完整地跳出所有循環(huán)時(shí)隆豹,可以利用聲明標(biāo)識(shí)來指明break跳出的位置
示例:找到最小的水仙花數(shù)(三位數(shù)椭岩,各個(gè)位上數(shù)字的立方等于三位數(shù)自身)
outer:
for(int i = 1; i <= 9; i++){
for(int j = 0; j <= 9; j++){
for(int k = 0; k <= 9; k++){
if(i*i*i + j*j*j + k*k*k == 100*i+10*j+k){
print(100*i+10*j+k);
break outer;
}
}
}
}
通過“break:標(biāo)識(shí)”方式可以讓break直接跳出多層循環(huán),類似的在循環(huán)和switch中璃赡,continue也可以執(zhí)行“continue:標(biāo)識(shí)”的方式(參考本章1.4節(jié))