Clean Code 無瑕的程式碼 第5章 編排
第五章介紹編排程式碼,讓程式碼增加可讀性。
編排的目的
程式的編排是一種溝通方式,影響程式碼的可讀性。
垂直的編排
想建造重要的大型系統,只使用200到500行的程式碼可以做到。
簡短的程式檔案比大型的程式檔案更容易理解。
報紙的啟發
閱讀報紙由上而下閱讀,每個段落會有大標題,讀者會先看大標題之後,才會決定要不要繼續閱讀小細節。
原始檔內容就像報紙,程式名稱簡單易懂,原始檔上層提供高階的概念和演算法,下層描述細節。
概念間的垂直空白區隔
每一段程式碼都代表一個完整的思緒,應該用空白行分隔這些思緒。
5-1範例有加空白行,5-2範例沒有加空白行,明顯5-1可讀性較佳。
垂直密度
5-3插入過多無意義的註解,可讀性反而不如5-4高,因為人的眼睛有固定的視野範圍。
垂直距離
變數宣告(Variable Declarations)
變數宣告盡可能靠近變數被使用的地方
區域變數應該在每個函式的最上方進行宣告
private static void readPreference(){
InputStream is = null;
迴圈的控制變數應該在迴圈敘述裡宣告
for (Test each; tests)
部分情況變數會宣在程式區塊的上方
for(){
TestRunner tr = …….
實體變數(Instance variables)
Java實體變數放在類別的最上方
C++根據 scissors rule 放到類別的最下方
文中的範例是錯誤示範,中間突然出現兩個實體變數。
相依的函式(Dependent Functions)
某個函式呼叫了另一個函式,兩個函式之間垂直編排要盡量靠近。
概念相似性(Conceptual Affinity)
就算函數之間沒有互相呼叫,命名規則相似、做的事情相似還是可以放在一起。
垂直的順序
一個被呼叫的函式,應該要出現在執行呼叫的函式的下方。
由上而下閱讀可以先發現高層模組,再找到低層模組。
水平的編排
依據統計資料,程式設計師偏愛短寬度的程式碼。
作者Bob大叔的寬度上限是120個字元。
水平的空白間隔和密度
範例中作者在運算子 (assignment operators) 例如 = 符號 左右兩邊都加入空白,增加可讀性。
空白可以用來表示相關,函式與參數高度相關,函式與小左括號之間不加入空白。
函式中的參數用逗號空白將參數分開。
空白可以表達先乘除後加減,可參考範例。
水平的對齊
兩個範例比較結果,作者不追求水平的對齊。
縮排
從範例可看出縮排可增加程式的可讀性
以下情況要縮排
類別裡的方法
方法內部的實作
子程式區塊的內容
違反縮排的規則
有時候if敘述或是while敘述短,會想要違反縮排原則。作者不建議這樣做。
空視野範圍
作者不喜歡這種結構
while(....)
{
程式區塊是空白
}
團隊的共同準則
一個團隊要有共同的編排準則
留言
張貼留言