第5章 Dart基礎(chǔ)語法 -- 條件控制和循環(huán)控制

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é)果是:


運(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é)果為:

運(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é)果


運(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é)果


運(yùn)行結(jié)果
2.3 forEach

定義在List科阎,Set等集合中的方法,使用方式

List a = [1,2,3];
a.forEach((x) => print(x));

運(yùn)行結(jié)果


運(yùn)行結(jié)果
2.4 while

與Java語言中的while循環(huán)類似

var i = 5;
while(i > 0){
  print(i);
  i--;
}

運(yùn)行結(jié)果


運(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é)果


運(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é)果


運(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é)果


運(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é))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末判哥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碉考,更是在濱河造成了極大的恐慌塌计,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豆励,死亡現(xiàn)場(chǎng)離奇詭異夺荒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)良蒸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門技扼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫩痰,你說我怎么就攤上這事剿吻。” “怎么了串纺?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵丽旅,是天一觀的道長(zhǎng)椰棘。 經(jīng)常有香客問我,道長(zhǎng)榄笙,這世上最難降的妖魔是什么邪狞? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茅撞,結(jié)果婚禮上帆卓,老公的妹妹穿的比我還像新娘。我一直安慰自己米丘,他們只是感情好剑令,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拄查,像睡著了一般吁津。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堕扶,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天碍脏,我揣著相機(jī)與錄音,去河邊找鬼挣柬。 笑死潮酒,一個(gè)胖子當(dāng)著我的面吹牛睛挚,可吹牛的內(nèi)容都是我干的邪蛔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扎狱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侧到!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淤击,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤匠抗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后污抬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汞贸,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年印机,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矢腻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡射赛,死狀恐怖多柑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楣责,我是刑警寧澤竣灌,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布聂沙,位于F島的核電站,受9級(jí)特大地震影響初嘹,放射性物質(zhì)發(fā)生泄漏及汉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一屯烦、第九天 我趴在偏房一處隱蔽的房頂上張望豁生。 院中可真熱鬧,春花似錦漫贞、人聲如沸甸箱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芍殖。三九已至,卻和暖如春谴蔑,著一層夾襖步出監(jiān)牢的瞬間豌骏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工隐锭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窃躲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓钦睡,卻偏偏與公主長(zhǎng)得像蒂窒,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荞怒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344