日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数要多小才够好——谈小函数之道

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数要多小才够好——谈小函数之道 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源地址:http://kb.cnblogs.com/page/154245/

?

  “設計良好的函數往往比較小,而過大函數的設計往往一塌糊涂,或者存在很大的優化空間。”

  也許你認為討論函數的大小沒有必要,原因是函數設計的本質是內聚,它的大小只是它的表現形式。而上面的原因有必要讓我們討論一下函數的大小問題。

  我對函數的核心思路:我提出代碼最小處理單元的概念:一個基本操作(賦值,比較等),一個函數調用(包括調用后判斷返回值進行判斷)都看成一個最小處理單元。那么,一個函數,最小處理單元合理的個數范圍在7以內。如果超過了7,你就要考慮把他們拆分成多個函數了(為什么是7?人同時能夠處理的信息不超過7個)。

  最小數目沒有限制,即便是只有1個,也有存在的必要。

  在下面的情況下我會將函數拆分為更小的函數:

  1、一眼不能夠看到函數所有的代碼。

  如果函數過長,無法一眼看到一個函數所有的代碼,我會毫不猶豫的拆分。我不想讓讀者去翻屏,也不想讓讀者前顧后盼,顧此失彼。漂亮的函數應該讓讀者一眼就知道他在做什么以及怎么做的。

  2、局部變量過多。

  如果局部變量超過七個,我會考慮拆分函數。變量過多意味著我要記錄太多的狀態,這會加重我大腦的負擔,同時要考慮太多的東西。這也同時意味著我可能沒有對函數功能進行深入的思考。

  3、太多的縮進。

  太多的縮進意味著太多的嵌套,要么是循環,要么是判斷,都會導致復雜的邏輯。

  4、如果你在使用Ctrl+C和Ctrl+V

  那你寫的代碼不夠拽(DRY,Don't Repeat Yourself)。這個時候,你要把你復制的部分拆分為新的函數。

  5、不處于同一抽象層次。

  舉例,有一個初始化函數,需要初始化配置數據,套接字,數據庫連接,通道狀態。

Void init() { Config_init(); Socket_init(); Db_init(); Int I = 0; For (I = 0;I < max_chn_num;i++)//初始化所有通道 { G_user_chn[i].status = status_init; …… } }

  上個函數中對所有通道的初始化一塊代碼就和其他的不處于一個抽象層次,我們應該將它封裝起來:

void chn_init() { Int I = 0; For (I = 0;I < max_chn_num;i++)//初始化所有通道 { G_user_chn[i].status =status_init; …… } }

  函數最小可以有多小,它存在的意義

  我見過的最優秀的函數:

int max(int a, int b) { return a > b ? a : b; }

  這個函數很小,只有一行,但是他存在的意義在于:在函數的調用點,我們一眼就知道是獲取a和b中的最大值,而不是分析 a>b?a:b 的邏輯。這樣可以節省程序員的腦力成本,從而達到一個目的:漂亮的函數應該讓讀者一眼就知道他在做什么以及怎么做的。

  小函數的最大障礙:性能

  對于程序員新手,小函數的最大障礙在于沒有經驗體會不到小函數的優勢,沒有經驗拆分大函數為更小的函數。

  對于有一定經驗的程序員,小函數的最大障礙也許是對性能的憂慮。

  對于性能,切記,不要過早優化。我們一般認為的程序的瓶頸,一般并不是程序的瓶頸:我們需要工具來確定真正的瓶頸所在,20%的代碼耗費了80%的性能,優化之前首先要找到那20%的代碼。函數調用會產生資源和性能的損耗,但是這是不是程序的性能瓶頸?消耗的性能占總體的性能百分比為多少?這一切在代碼編寫時并不清楚,所以,我的觀點是寧可選擇簡短的函數來獲得清晰簡單的設計,以便在項目后期能夠更快,更好的進行性能優化。

  很多人都在質疑我上面列舉的max函數的實例,如果說他在運行期間調用次數不大,則對性能的影響基本可以忽略,而獲得的可讀性,清晰性這極具價值;反過來,如果他的調用次數是否龐大,以致成為了性能的瓶頸,則完全可以在程序編寫完成后,很快的用其他的方法優化。程序的瓶頸不會很多。

  關于函數調用產生的性能消耗,我會抽時間測試一下,看到底占用多少。

  最后的建議:

  在對新員工培訓的過程中,發現程序員新手一般對函數的大小不夠敏感。所以,我建議你可以多嘗試編寫10行左右(甚至更小)的函數,慢慢你會發現小函數原來具有大威力。

轉載于:https://www.cnblogs.com/ruby-huang/archive/2012/08/18/2645561.html

總結

以上是生活随笔為你收集整理的函数要多小才够好——谈小函数之道的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。