Chapter 1 : Clean Code
(1) 童子軍規則 - 讓營地比你來時更乾淨!!儘管Legacy code很多 但每一次比每一次乾淨也是件好事
Chapter 2 : Meaningful Names
(1) 名副其實Bad : int d;
Good : int elapsedTimeInDays;
(2) 避免誤導
如果你的變數型態不是List
Bad : accountList
Good : accountGroup or accounts
(3) 做有意義的區分
不使用意義含混的廢話(Info, Data, a, an, the)
ex. ProfuctInfo, aProduct
(4) 避免把類型或者變數範圍編碼進名稱
如果未來類別改變 還要記得改變數會很麻煩
如果變數未改 又會造成誤導
ex. 原本宣告 PhoneString phoneString
後來改類別 PhoneNumber phoneString
phoneString這變數名稱會誤導下一個開發者
(5) Interface
不對介面類別名稱作編碼
IShapreFactory
寧可針對實作類別名稱作編碼
ShapreFactory
ShapreFactoryImp
(6) Class
類別名稱應該是名詞或名詞短語
(7) Function or Method
函式名稱應該是動詞或動詞短語
Chapter 3 : Functions
(1) Small & Do one thing函數應該做一件事情,做好這件事情,只做這一件事情。
所以Function應該要短
(2) Function Arguments
參數數量越少越好
如果參數數量無法降低 那代表你必須要開始封裝參數了
ex.
Circle makeCircle(double x, double y, double radius)
Circle makeCircle(Point center, double radius)
(3) Boolean Arguments
如果你想要用一個Boolean值去當開關
Ex. SetJugService(true) // Start Jug Service
SetJugService(false) // Stop Jug Service
上面作法的缺點在於:
1. 參數僵化成2選1
2. Function內必須有if邏輯
你倒不如設計成
StartJugService()
StopJugService()
(4) Command Query Separation
The real solution is to separate the command from the query so that the ambiguity cannot occur.
if( set("username","jug"))...
Function 應該一次做一件事 要嘛回答問題 要嘛執行動作
上述 function 會讓reader混淆
有些人會將 set 改成 setAndCheckIfExists
但是對於閱讀仍舊沒有幫助
比較適合的作法是 :
if(attributeExists(“username”))
setAttribute(“username”, “jug”);
(5) Don’t Repeat Yourself
Duplication may be the root of all evil in software.
如果code一再重複 表示你可以將code抽出來處理
0 意見:
張貼留言