不要為了重用迴圈結構耦合太多邏輯

2021-10-10 07:06:18 字數 1302 閱讀 2030

迴圈結果變數

我們書寫乙個迴圈邏輯的時候,如果迴圈完成後,還有邏輯要執行,需要結果變數來持有結果。

string findresult = null;

for (string str : stringlist)

//其他**,使用findresult ,此處只是簡單輸出

system.out.println(findresult);

抽取方法省去結果變數通過把迴圈體抽取方法,就可以使用return語句簡化邏輯,省去結果變數。

public static string matchpre(liststringlist, string pre) 

}return null;

}

呼叫的地方直接呼叫抽取的方法

string findresult = matchpre(stringlist, pre);

/其他**,使用findresult ,此處只是簡單輸出

system.out.println(findresult);

過程變數比如在迴圈中我們需要記錄一些中間結果,我們稱為過程變數;應該儘量減少過程變數數量,比如上乙個元素可以通過當前下標減去1直接獲得;

有些簡單啊

這些小問題看起來都很簡單,但在接下來的迴圈共用中,這些簡單問題附加在一起,會產生1+1>2的效果,破壞力會增強;

迴圈共用

先看下如下**形狀,為了共用迴圈,把a,b,c,甚至還有d....全部寫進了迴圈裡;

問題1:引入多個結果變數,因為在乙個迴圈中,當乙個邏輯a已經找到結果,不能使用return語句返回結果,其他邏輯bcd還需要迴圈繼續遍歷,只能建立結果變數儲存結果;引入多個過程變數,有些邏輯需要持有一些中間結果,需要中間過程變數,不同邏輯的中間變數摻雜在一起;

問題2:控制糾結:迴圈中的控制邏輯,牽一發動全身;

問題3:邏輯糾結:為了共用已有**框架,增加c邏輯的時候,c可能在a和b邏輯中設定一些中間變數,最終**邏輯糾結在一起,就像一團亂麻,閱讀和維護困難。

如何解決-回歸簡單

程式本來就很簡單,沒有什麼是拆分和抽象解決不了的:

不要為了專案而專案

為了專案而專案,是很多人讓我吃驚的習慣,類似的例子還有為了創業而創業。為了創業而創業什麼意思呢?發達國家很多人,是先有了乙個激動人心的想法和思路,然後為了實現這個想法,發覺必須要創業才能實現它。而中國很多人不是這樣,中國很多人是先想著當老闆賺錢,覺得要賺錢必須創業,然後再去想創業該做什麼好呢?其實我...

設計原則 不要為了復用而使用繼承

為什麼要得出這個結論 在單實現繼承模型下,你復用了乙個基類的實現,就不能復用其它基類的實現了,介面繼承 擴充套件型別 mixin 可以很好的解決這個問題。下面我會演示 待重構的重複 用繼承消除重複 用擴充套件類 mixin 消除重複 ruby的鴨子型別 mixin的實現 元程式設計可以更牛叉,有機會...

不要為了吃而吃要學會追尋美食

很多人覺得吃飯無外乎吃飽而已,甚至很多人為了健美吃飯以能量為單位,這我是做不到的。我覺得吃飯是挺大的事情,如果不能追求美食這天大的事,那生活就好像被什麼切割了一般。渴望尋找志同道合的人,雖然我不是個孤僻的人,但必須承認,我還是更喜歡在各種朋友圈裡只有幾塊零星的發言,沒有特別撞擊的點能夠值得聊很久。發...