爲什麼我們要創建函數 & 什麼是好的函數設計

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/thirtyfive16/article/details/51839065

什麼時候纔會創建一個函數呢?


如果問你這個問題你能答上來嗎? 學習語言這麼多年了,我語法都熟悉,會創建函數。但是問我什麼情況下,需要創建一個函數。直接有點暈。


整理一下思路:我爲什麼寫函數呢?

0 業務需要:不同的業務需要不同的操作,每個操作對應一個函數。如對一個系統可以讀數據,也可以寫數據。那麼我會寫兩個不同的函數。

1 降低複雜度: 面對一個需求,我不可能在一個函數裏面全部實現。否則,會有幾十萬行的函數吧。當業務之間的關係不大的時候能成爲獨立的一塊的時候,爲了降低複雜度,我會拆分成不同的函數。

2 抽象思考:面向過程的設計中,任務就是按照順序執行的函數。如果我一個表達式一個表達式的寫,那麼我的思路會侷限在在表達式層面,陷入細節無法自拔。如果我寫函數來代替一段代碼,我的思路會非常清楚,所以可以幫助我進行思考設計。

3 可讀性:表達式是正兒八經的機器語言,計算機讀的時候,一個字爽。但是我們人類是很痛苦的,程序員已經被計算機奴役,要在人類和計算機之間做翻譯,人奸。但是函數是用自然語言命名的,多寫函數,你的代碼會非常清晰易懂。

    3.1 要求函數必須短小:越短小的函數,越容易讀懂。當然這裏的短小不一定易懂,可以用圈複雜度來衡量函數內部是否複雜。同時如果有大量的短小函數,函數名字比較難以命名,而且會有大量的長函數名字

   3.2 複雜表達式,可以用函數來代替。比如if(A>B  && C>D && E<F ||A*C > B*F)直接替換成函數

4 消除重複代碼:如果代碼中很多重複,那麼抽取成單獨的函數。易讀,易維護。

5 函數做到了隔離隱藏,因爲它是獨立的一塊,同樣類也有類似的好處。隔離使得兩部分(調用者和被調用者)獨立變化,隱藏函數內部實現,使得可以改變函數內部實現,而不改變函數功能。

6 單一職能原則:這個在設計類的時候,也有相同的原則。

7 語法需要:比如必須有main函數,所以必須至少要創建一個函數吧。

8 遞歸需要:完成遞歸,必須有函數


************************************************************************************************************************************

什麼樣子的函數是好的設計呢?

根據以上分析,很容易得到:

1 短小:不能超過50行,圈複雜度不要超過5.

2 越多越好:短小的一個直接結果

3 單一:一個函數功能越單一,越可能短小,越可能簡單不復雜,越可能易讀。

4 函數名字要好:易讀啊

5 不要重複自己:有些函數相似度達到90%的,名字不好起,還難以維護。要拆分爲不同的函數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章