1. 程式人生 > >程式碼整潔之道讀書筆記--函式

程式碼整潔之道讀書筆記--函式

函式

好函式的需要滿足:

1. 短小:

經過漫長的試錯,經驗告訴我,函式就該小。

一個強制性的原則是,程式碼長度最好20行封頂。

2.程式碼塊和縮排:

if、else、while語句等,其中的語句只有一個,就是一個函式呼叫語句;
函式的縮排層級不該多於1層或2層。

3.只做一件事:

函式應該做一件事,做好這件事,只做這一件事。

判斷函式是否只做了一件事,有如下2種判斷方法:
1.函式是否只是做了該函式名下同一抽象層上的步驟;
2.看是否能再拆出一個函式,該函式不僅只是單純地重新詮釋其實現。

4.自頂向下讀程式碼–向下規則:

讓程式碼擁有自頂向下的閱讀順序,讓每個函式後面都跟著位於下一抽象層級的函式。這樣一來,在檢視函式列表的時候,就能循抽象層級向下閱讀了,這叫向下規則。示例如下:
向下規則

5.函式引數:

最理想的引數數量是零,其次是一,再次是二,應儘量避免三,有足夠特殊的理由才能用三個以上引數。includeSetupPage()要比includeSetupPageInto(newPage-Content)易於理解。引數與函式名處在不同的抽象層級,它要求你瞭解目前並不特別重要的細節。引數在測試時更加叫人為難。

6.無副作用

函式承諾只做一件事,但還是會做其他被藏起來的事。有時,它會對自己類中的變數做出未能預期的改動;有時,它會把把變數搞成向函式傳遞的引數或是系統全域性變數。無論哪一種情況,都是具有破壞性的,會導致古怪的時序性耦合以及順序依賴。有副作用的示例程式碼如下:
副作用程式碼示例


副作用就在於對Session.initialize()的呼叫,函式名checkPassword顧名思義就是用來檢查密碼的,並未暗示它會初始化該次對話。所以該函式有抹除現有會話的風險。

7.如何寫出這樣的函式:

寫程式碼和寫別的東西很像。在寫論文或文章時,你先想什麼就寫什麼,然後再打磨它。初稿也許粗陋無序,你就斟酌推敲,直至達到你心目中的樣子。
起初寫函式時,往往都冗長而複雜,有太多的縮排和巢狀迴圈,有過長的引數列表,名稱是隨意起的,也會有重複的程式碼。然後再打磨這些程式碼,分解函式、修改名稱、消除重複、縮短和重新安置方法,有時還要拆散類,同時保持測試通過,最後組裝這些函式。