Re: [請益] 很多層迴圈和if 怎麼寫比較好整理
※ 引述《Ting1024 (無)》之銘言:
: ※ 引述《qrtt1 (null)》之銘言:
: : 這樣就可以使用 early break/return 的方式
: : 也就是版友 ronnywang 建議的部分。
: 善用 condition , return 的方法是很方便解決
: 太多層判斷的問題
: 不過很多的書籍,一直強調函示不要「中途返回」
: 各位認為呢?
: 其實goto也不錯,只要能取一個不錯的目的地名稱,
: 會有一針見血的效果 XD
我個人的經驗:
1. 多層的if else要極力避免。
每開一組{},就是一個stack,每個stack的狀態與條件都是一直累加上去的。
對正在寫的人來說,if else 堆疊一直上去在那個當下可能很方便。
但對過了一個星期的自己還有其他人來說,要看懂堆疊最末端的那段邏輯所代表
的意義就得要把該分枝從頭走過來才能確實掌握來龍去脈。
習慣寫這種程式碼的人,在我看來就像是把油漆工把油漆筒放在起點然後拿著刷子
一路往終點衝,想要憑著刷子上沾著的油漆就刷完整片籬笆一樣,基本上只爽在那
個衝刺的當下。
在這樣的程式碼基礎上(7~8層,500 line+),繼續加功能或修Bug是浪費時間。
就算是寫演算法相關,我寧可寫一堆的pure method,然後讓現代聰明的Compiler
還是VM幫我inline就好。
2. 中途會用if return的寫法是可以用的,但這樣寫通常較適用在窮舉或消去的情境上。
窮舉法舉例來說,java 裡物件equals的實做常常就是一堆中途Return,目的就是要
窮舉所有false的情況(或是true,端看那個比較好窮盡),那剩下的可能性就是true
(或是false)。
消去法舉例來說通常用在排除特殊條件的時候,如果有個方法實做,輸入參數的組合
當中只存在少數特例需要特別處理,其他多數輸入參數都可以用通解得到正確輸出,
那既然這段程式還不到給架構解的程度,最好的方法就是在方法實做的開頭把特例
排除掉。
--
我所信仰的科學是一種謙卑的理性,承認自身的無知與渺小才能觀察到世界在我們貧
弱的知覺上留下來的痕跡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 12.208.243.66
推
07/17 14:03, , 1F
07/17 14:03, 1F
討論串 (同標題文章)