→ 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