學習之路三十三 重構技巧的學習

2021-09-06 11:04:50 字數 2677 閱讀 5810

最近看了聖殿騎士大哥的重構文章,其中有幾個重構技巧讓我頗有感觸,特此記錄下。

1.封裝集合,返回集合介面型別

這個技巧讓我想起了專案中的**,比如:

1

public

class

check29

}1011public

class

detail

1214 }

如果這樣設計,那麼使用者通過呼叫getdetails方法之後就可以對你的集合做任意的改動,這樣的做法是非常危險的,所以必須要改進。

重構原則:返回可迭代器型別介面來保證對集合的封裝,改進如下:

1

public

class

check211

12public ienumerableint, detail>>getspecificdetail()

1316}17

18public

class

detail

1921 }

迭代器文章入口:迭代器學習之一:使用ienumerable和ienumerator介面

我將在專案中運用此重構技巧。

2.提取判斷條件作為方法 - 方法名要有意義

當遇到複雜的判斷後,如果沒有注釋,很多人第一眼都不會理解這個判斷是做什麼的。

所以把複雜的判斷條件提取為方法,再取個有意義的名字,那麼別人看一眼就明白做什麼的,比如:

1

public

class

check24

5public

void

sendmessage()612

13//

重構後的**

14//

這樣別人就知道這個判斷的作用:判斷當前的資訊有沒有提交

15if

(hasconfirm(getdetail))

1619}20

21public

bool

hasconfirm(detail detail)

2225}26

27public

class

detail

2830 }

3.為帶有大量bool引數的方法重新進行拆分組合

這個重構手法在專案中還沒有用過,方法帶有大量的bool引數本來就很奇葩,不過如果真的遇到了,我們也有應對方法,如下:

1

public

class

test

25 }

重構後的**:

1

public

class

test28

9public

void

createb()

1013

14public

void

createc()

1518

19private

void create(bool isa, bool isb, bool

isc)

2021 }

4.避免雙重否定

其實這個重構手法我理解為盡量避免使用在if條件裡使用 - 「!」.

因為如果本來你的判斷條件就是表達否定的意思,那麼在加上乙個否定的判斷,那麼就會是雙重否定。

那別人理解起來是不是會很抓狂,他會在心理畫個圈圈狠狠的詛咒你的,:-),比如:

1

public

class

test211

}1213public

bool nopayment

14 }

重構後的**:

1

public

class

test211

12//

重構後的**

13//

避免使用雙重否定來作為判斷條件

14if

(haspayment)

1518}19

20public

bool nopayment

2122

public

bool haspayment

23 }

5.盡快返回 - 返回值

這個重構技巧可以分解複雜的判斷條件,是那些冗餘的判斷分支化成簡介的小分支,比如:

1

public

class

testone218

}19}20

}21}22

}2324public

class

detail

2527 }

重構後的**:

1

public

class

testone215

}16}17

18public

class

detail

1921 }

以同步至:個人文章目錄索引

CUDA學習(三十三)

最大化指令吞吐量 為了最大化指令吞吐量,應用程式應 在本節中,吞吐量以每個多處理器每個時鐘週期的操作次數給出。對於32的變形大小,一條指令對應於32個操作,所以如果n是每個時鐘週期的運算元,則指令吞吐量是每個時鐘週期n 32條指令。所有的吞吐量都是針對乙個多處理器的。它們必須乘以裝置中的多處理器數量...

學習總結 三十三

1 什麼是守護程序 程序是乙個正在執行的程式,守護程序也是乙個程序,守護程序的意思就是乙個程序保護另乙個程序 2 守護程序使用場景 1 什麼是互斥鎖 互斥鎖就是互相排斥的鎖,乙個資源被鎖了,其他子程序就無法使用 2 為什麼需要互斥鎖 因為併發帶來的資源競爭問題,當多個程序同時要操作乙個資源將會導致資...

Python學習之旅(三十三)

網路通訊是兩台計算機上的兩個程序之間的通訊,而網路程式設計就是如何在程式中實現兩台計算機的通訊 p協議負責把資料從一台計算機通過網路傳送到另一台計算機 tcp協議則是建立在ip協議之上的。tcp協議負責在兩台計算機之間建立可靠連線,保證資料報按順序到達 許多常用的更高階的協議都是建立在tcp協議基礎...