整潔程式碼
當我們可以完善的實現一個業務需求、之後我們就需要考量程式碼的一個可讀性和複用性,以及模組解耦。
我自己也經歷過一些中中小小的工作,自己也每天生成糟糕的程式碼,也經歷過幾次系統重構工作,慢慢的體會到了在編寫程式碼的時候自己需要遵循約定俗成的規範,儘可能的讓自己的程式碼在下次閱讀時一看就懂,包括下一位同事能夠維護我的程式碼。
糟糕的程式碼
閱讀本書讓我想起了自己經歷過的一些場景:
領導需要我們每天加班加點的完成超額的工作任務,所有給到我們測試程式碼的時間很少,甚至寫完只會測試執行是否報錯,然後就會進入冒煙環節,前面的人寫的程式碼儘量能不動就不會動,這樣讓我們並不會思考業務的可信性,以及程式碼的設計思路是否合理。
怎麼樣可以寫出相對於整潔程式碼呢?
- 邏輯直接
- 程式碼所作的事情,要從程式碼上面很直觀的看出來,不要拐彎抹角。
- 系統核心設計高聚合
- 減少系統耦合度,讓模組程式碼不東串串西闖闖。
- 減少重複程式碼
- 減少程式碼量,多進行抽象和設計。
- 減少類、方法、函式數量
- 儘量用最少的程式碼量和設計維度完成。
- 單元測試完善
- 通過單元測試可以直白的看出業務場景和邏輯
有意義的命名
軟體中隨處可見命名,我們給變數、函式、引數、類、和類庫名稱,我們命名,不斷的命名。
既然有這麼多命名要做,不妨做好它。
說起來很簡單。選個好名字需要花時間,但省下的時間比花掉的多。注意命名,一旦有好的命名,就換掉舊的。
避免誤導
當你看到下面的程式碼,你覺得你接受的型別是列表呢?還是單類呢?還是報錯呢?
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。