[爆卦]For break是什麼?優點缺點精華區懶人包

為什麼這篇For break鄉民發文收入到精華區:因為在For break這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者lovdkkkk (dk)看板java標題Re: [問題] 兩層以上的for迴圈break?時間...


※ 引述《henry4343 (henry)》之銘言:
: 請問一下兩層以上的for迴圈要break有什麼好方法嗎?
: 目前的作法是:
: isBreak = fasle;
: for () {
: for () {
: if() {
: isBreak = true;
: break;
: }
: }
: if(isBreak) {
: break;
: }
: }
: 但如果再更多層不就要多一堆boolean判斷,原本在obj-c內用goto就沒這問題,
: 但java好像沒有goto的功能?
: 感謝

或許可以把判斷直接寫進 for () ?

for (...; ... && !isBreak; ...) {
...
for () {
...
}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.197.13
※ 文章網址: http://www.ptt.cc/bbs/java/M.1402582002.A.47F.html
Killercat:那還是會跑完全部第二圈才有機會出來啊.... 06/12 23:40
lovdkkkk:第二圈跟原本的一樣用 break, 只是把後面的 if 搬上去 @@ 06/13 00:18
Killercat:其實前面在想的就是避免這個flag 不過我是覺得都還可以 06/13 12:43
longlongint:寫成函數直接return吧 06/13 16:24

後來多想了一下,
這種寫法只能用在內層 break 後沒做任何事立刻重跑外層的情況,
還是用 label 或 return 能真的全停。

其中 label 又有最大的彈性,可以隨便跳外面哪一層,
return 就只能直接整個停掉。

不過 label 如前面推文說到的並不建議使用,
(雖然真的是好用啊...)
而 return... 有另外的問題,
想像一個如原 po 所說更複雜的多層廻圈,
如果中間任何地方都可能 call 個 return 結束,
似乎也不是那麼易讀。

一些相關討論
Good programming habits with return statements [closed]
http://ppt.cc/Yy9H
Is it bad style to use 'return' to break a for loop in Java?
http://ppt.cc/CRDf

或許順好流程,避免 "更複雜的多層廻圈" 出現才是根本解決之道。

JustinHere:filter, map, reduce, flatMap ... 06/16 07:23

當 "多層" 是必需時,
可以努力的就是設法讓它不要 "複雜"...XD

JustinHere:重構…一次做一件事…xd 06/16 11:57
lovelycateye:每層迴圈一定代表某見事情,分層抽出去 return 就好 06/16 16:07

嗯嗯,用 return 的話這樣也能解一部份,
不過一次要跳出兩層 (4 -> 2) 的話還是需要判斷式。

"每層迴圈一定代表某見事情" 這也是一個重點,
因為假如此句為真,
那照理說中止條件都可以寫在 for (...),
最多也只會中途 break 一層,
會需要另外寫判斷式一次跳掉多層感覺若不是幾件事攪在一起,
可能就是一件事拆成幾個廻圈,
上面所謂 "順好流程" 就是要檢查這類情況。

前面 Killercat 大大推文提到的 Chain of Responsibility 可能是一個解法,
因為那本身就是要做到 Chain 中的每一環只處理一件事,
至於要怎麼把 for 廻圈轉成那樣...還要再參詳參詳 0rz
※ 編輯: lovdkkkk (36.226.197.13), 06/16/2014 19:30:58

你可能也想看看

搜尋相關網站