Clean-Code:函數

 

Clean-Code:函數

短小:

函數的第一規則是短小,第二規則還是短小,

很明顯作者將短小放到第一個列出來的位置。說明對於函數而言,短小的重要性不言而喻。

可是函數多少行纔算短小呢?

代碼大全上說一個函數理論上應該小於50行,我認爲這個數字有點大了,我比較同意Bob的看法,”20行左右的代碼爲佳”

 

代碼塊和縮進:

代碼塊和縮進的規則很多,不過有很多格式化工具可以爲我們做這種事情,

比如在vs2010中,就可以ctrl+ A(全選) ,Ctrl+K+F(格式化)

只做一件事:

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

基本上這點大家都知道,如果一個函數做了多個事就代表有多個原因可以導致函數被修改。

但是難的是這一件事是什麼?,

比如代碼:

public static string RenderPageWithSetupAndTeardowns(
    PageData pageData,Boolean isSuite) throw Exception
{
    if(isTestPage(pageData))
    {
        includeSetupAndTeardownPages(pageData,isSuite);
    }
    return pageData.getHtml();
}

看起來好像做了三件事:

1:判斷是否爲測試頁

2:如果是,則包含設置和分析步驟。

3:返回Html。

那麼RenderPageWithSetupAndTeardowns函數是做了一件事,還是三件事呢?

 

Bob 提供了”To”(要)原則,也就是以To起頭段落來描述這個函數。

要(To) RenderPageWithSetupAndTeardowns,檢查頁面是否爲測試頁,如果是測試頁,就包含設置和分析步驟,無論是不是測試頁,都返回HTML。

這三件事情都處於一個抽象層次上,所以RenderPageWithSetupAndTeardowns做了一件事。

 

判斷函數只做了一件事還有另一個方法:看能否再拆出一個函數

我經常用的就是這第二個方法,不斷的抽取函數,直到不能抽取爲止,那麼就可以保證函數只做了一件事了。

 

函數分佈:

自頂向下讀代碼,向下規則。

一般讀代碼都是從上到下,從左到右,如果函數的分佈也能符合這個原則的話,那麼閱讀起來就比較輕鬆了。比如下面的代碼:

private void Method1()
{
    Method2();
}

private void Method2()
{
    Method3();
}

private void Method3()
{
    ...
}

閱讀起來非常的輕鬆,看到這樣的代碼,心裏也比較舒服。

困難的是函數的調用時多個,可能Method1調用Method2,Method2調用Method3,然後Method3調用Method2.什麼的,就是說,函數的調用存在交叉

image

在上面的圖中,順序可能是1 2 4 3 5.也可以是1 2 3 4 5。

不過需要保持的一點就是調用的方法在前面,被調用的方法在後面。這樣就能保證代碼是從上往下看的了。

Switch語句:

很多設計模式都是針對Switch語句,比如抽象工廠,策略,狀態 等。

原因也比較簡單:switch語句天生做了N件事,也就是引起switch語句變化的原因至少有N種

針對這方面的介紹可以去看下策略模式。

作者:LoveJenny     
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
分類: C#
發佈了26 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章