技術中的小函式之道
曾經有人對函式方面提出程式碼最小處理單元的概念:一個基本操作(賦值,比較等),一個函式呼叫(包括呼叫後判斷返回值進行判斷)都看成一個最小處理單元。那麼,一個函式,最小處理單元合理的個數範圍在7以內。如果超過了7,你就要考慮把他們拆分成多個函式了。
設計良好的函式往往比較小,而過大函式的設計往往一塌糊塗,或者存在很大的優化空間,函式設計的本質是內聚,它的大小隻是它的表現形式,討論一下函式的大小問題很有必要。最小數目沒有限制,即便是隻有1個,也有存在的必要。
在下面的情況下我們將函式拆分為更小的函式:
一眼不能夠看到函式所有的程式碼
如果函式過長,無法一眼看到一個函式所有的程式碼,我會毫不猶豫地拆分。我不想讓讀者去翻屏,也不想讓讀者前顧後盼,顧此失彼。漂亮的函式應該讓讀者一眼就知道它在做什麼以及怎麼做的。
區域性變數過多
如果區域性變數超過七個,我會考慮拆分函式。變數過多意味著我要記錄太多的狀態,這會加重我大腦的負擔,同時要考慮太多的東西。這也同時意味著我可能沒有對函式功能進行深入的思考。
太多的縮排
太多的縮排意味著太多的巢狀,要麼是迴圈,要麼是判斷,都會導致複雜的邏輯。
不處於同一抽象層次
舉例,有一個初始化函式,需要初始化配置資料,套接字,資料庫連線,通道狀態。
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, intb)
{
return a > b?a:b;
}
這個函式很小,只有一行,但是它存在的意義在於:在函式的呼叫點,我們一眼就知道是獲取a和b中的最大值,而不是分析a > b?a:b
的邏輯。這樣可以節省程式設計師的腦力成本,從而達到一個目的:漂亮的函式應該讓讀者一眼就知道它在做什麼以及怎麼做的。
如果新晉的程式設計師對函式的大小不夠敏感,那麼,可以多嘗試編寫10行左右(甚至更小)的函式,慢慢你會發現小函式原來具有大威力。
本文為Anyforweb技術分享部落格,需要了解網站建設及更多Web應用相關資訊,請訪問anyforweb.com。
相關文章
- Java中的七種函式程式設計技術 - foojayJava函式程式設計
- 技術社群的掙錢之道
- Java中的函式程式設計技術 - Deepu K SasidharanJava函式程式設計
- 函式程式設計之道函式程式設計
- 編寫小而美函式的藝術函式
- JS程式碼簡潔之道--函式JS函式
- 小程式開發中雲函式的應用!函式
- jQuery操作iframe中js函式的方法小結jQueryJS函式
- 程式碼的藝術:如何寫出小而清晰的函式函式
- PHP程式碼簡潔之道——函式部分PHP函式
- 函式小結函式
- python將函式寫入模組中的小技巧Python函式
- 分散式技術設計中的問題分散式
- Rust中的into函式和from函式Rust函式
- 這些高階的函式技術,你掌握了麼函式
- 分散式技術中不可或缺的分散式互斥方案分散式
- 分散式資料庫重要技術概念小記分散式資料庫
- Sql 中的 left 函式、right 函式SQL函式
- JS中函式內套函式的呼叫JS函式
- 函式ZwQuerySystemInformation小結函式ORM
- Oracle 函式小結Oracle函式
- RANK函式小結函式
- 生成函式小記函式
- 開發Webview的技術,小的技術知識點WebView
- JS中的函式JS函式
- javascript中的函式JavaScript函式
- 大資料技術-hive視窗函式詳解大資料Hive函式
- 面試驅動技術之 - isa && 元類 && 函式呼叫面試函式
- 面試驅動技術之 – isa && 元類 && 函式呼叫面試函式
- PHP快取技術:memcache函式詳解之一PHP快取函式
- 小團隊的技術管理
- 8個CSS函式的小技巧CSS函式
- js中在一個函式中引用另一個函式中的函式,可以這麼做JS函式
- JavaScript中的compose函式和pipe函式JavaScript函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 編碼規範 | Java函式優雅之道(上)Java函式
- 編碼規範 | Java函式優雅之道(下)Java函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標