日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
函數(shù)要多小才夠好——談小函數(shù)之道

“設(shè)計良好的函數(shù)往往比較小,而過大函數(shù)的設(shè)計往往一塌糊涂,或者存在很大的優(yōu)化空間?!?/strong>

成都服務器托管,成都創(chuàng)新互聯(lián)提供包括服務器租用、遂寧服務器托管、帶寬租用、云主機、機柜租用、主機租用托管、CDN網(wǎng)站加速、域名注冊等業(yè)務的一體化完整服務。電話咨詢:18982081108

也許你認為討論函數(shù)的大小沒有必要,原因是函數(shù)設(shè)計的本質(zhì)是內(nèi)聚,它的大小只是它的表現(xiàn)形式。而上面的原因有必要讓我們討論一下函數(shù)的大小問題。

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

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

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

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

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

2、局部變量過多。

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

3、太多的縮進。

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

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

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

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

舉例,有一個初始化函數(shù),需要初始化配置數(shù)據(jù),套接字,數(shù)據(jù)庫連接,通道狀態(tài)。

 
 
 
  1. Void init()  
  2. {  
  3.         Config_init();  
  4.         Socket_init();  
  5.         Db_init();  
  6.         Int I = 0;  
  7.         For (I = 0;I < max_chn_num;i++)//初始化所有通道  
  8.         {  
  9.                 G_user_chn[i].status = status_init;  
  10.                 ……  
  11.          }  
  12. }  

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

 
 
 
  1. void chn_init()  
  2. {  
  3.         Int I = 0;  
  4.         For (I = 0;I < max_chn_num;i++)//初始化所有通道  
  5.         {  
  6.                 G_user_chn[i].status =status_init;  
  7.                 ……  
  8.         }  
  9. }  

函數(shù)最小可以有多小,它存在的意義

我見過的最優(yōu)秀的函數(shù):

 
 
 
  1. int max(int a, int b)  
  2. {  
  3.         return a > b ? a : b;  
  4. }  

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

小函數(shù)的最大障礙:性能

對于程序員新手,小函數(shù)的最大障礙在于沒有經(jīng)驗體會不到小函數(shù)的優(yōu)勢,沒有經(jīng)驗拆分大函數(shù)為更小的函數(shù)。

對于有一定經(jīng)驗的程序員,小函數(shù)的最大障礙也許是對性能的憂慮。

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

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

關(guān)于函數(shù)調(diào)用產(chǎn)生的性能消耗,我會抽時間測試一下,看到底占用多少。

最后的建議:

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


網(wǎng)頁題目:函數(shù)要多小才夠好——談小函數(shù)之道
本文URL:http://m.5511xx.com/article/dpccdip.html