讀書筆記-程式碼整潔之道(一)

是你晨曦哥呀發表於2022-02-18

整潔程式碼

當我們可以完善的實現一個業務需求、之後我們就需要考量程式碼的一個可讀性和複用性,以及模組解耦。
我自己也經歷過一些中中小小的工作,自己也每天生成糟糕的程式碼,也經歷過幾次系統重構工作,慢慢的體會到了在編寫程式碼的時候自己需要遵循約定俗成的規範,儘可能的讓自己的程式碼在下次閱讀時一看就懂,包括下一位同事能夠維護我的程式碼。

糟糕的程式碼

閱讀本書讓我想起了自己經歷過的一些場景:

領導需要我們每天加班加點的完成超額的工作任務,所有給到我們測試程式碼的時間很少,甚至寫完只會測試執行是否報錯,然後就會進入冒煙環節,前面的人寫的程式碼儘量能不動就不會動,這樣讓我們並不會思考業務的可信性,以及程式碼的設計思路是否合理。

怎麼樣可以寫出相對於整潔程式碼呢?

  • 邏輯直接
    • 程式碼所作的事情,要從程式碼上面很直觀的看出來,不要拐彎抹角。
  • 系統核心設計高聚合
    • 減少系統耦合度,讓模組程式碼不東串串西闖闖。
  • 減少重複程式碼
    • 減少程式碼量,多進行抽象和設計。
  • 減少類、方法、函式數量
    • 儘量用最少的程式碼量和設計維度完成。
  • 單元測試完善
    • 通過單元測試可以直白的看出業務場景和邏輯

有意義的命名

軟體中隨處可見命名,我們給變數、函式、引數、類、和類庫名稱,我們命名,不斷的命名。

既然有這麼多命名要做,不妨做好它。

說起來很簡單。選個好名字需要花時間,但省下的時間比花掉的多。注意命名,一旦有好的命名,就換掉舊的。

避免誤導

當你看到下面的程式碼,你覺得你接受的型別是列表呢?還是單類呢?還是報錯呢?

   var userList=getUser(id);

做有意的區分

小夥伴問題來了,你能區分第一個引數和第二個引數是幹嘛的嗎?

    public static void copyChars(char[] a1, char[] a2)
    {
        for (int i = 0; i < a1.Length; i++)
        {
            a2[i] = a1[i];
        }
    }

小夥伴你們再看看,這個方法應該靠譜一點點了吧

    public static void CopyChars(char[] sourceArr, char[] destinationArr)
    {
        for (int i = 0; i < sourceArr.Length; i++)
        {
            destinationArr[i] = sourceArr[i];
        }
    }

使用讀得出來得名稱

當我們在專案中出現這樣的程式碼,你一定會溫習C語言的吧

    var a = 0;
    for(var i=0;i<10;i++){
        a+=i;
    }

那麼說我們將程式碼調整一下,這樣是不是就不會迷糊了。

    var count=0;
    for(var i=0;i<10;i++){
        a+=i;
    }

避免思維對映

在我們命名的使用盡量,使用大眾熟知,約定成俗的命名,減少專案溝通時候存在的思維偏差。

類名應該是名詞或短語

像Customer,Account,避免使用Manager,Processor,Data或者Info這樣的類名。類名不應當是動詞。方法名應該是動詞或動詞短語,如postPayment ,deletePage或Save,屬性訪問、修改和斷言應該根據其值來命名,並加上get,set,is這些字首。

別扮可愛

比如誰知道HolyHandGrenada 函式是幹什麼的,沒錯這個名字挺伶俐,但是不過DeleteItems或許是更好的名字。

每個概念對應一個詞

並且一以貫之。
在一堆程式碼中有Controller,又有manager,driver。就會令人困惑。比如DeviceManager和Protal-Controller之間又什麼本質區別?

別用雙關語

如add、insert、append等詞都有類似的意思,在使用時最好準確,而且統一。如字串連線應該用append,而不是add。

相關文章