編排
程式的編排、可讀性、風格會在程式中立下先例,持續且深遠的影響程式的可維護性和可擴充性。
原始檔的最上方,提供高階的概念和演算法,在往下閱讀時,程式的細節才慢慢呈現出來,直到出現最低階的函式及細節為止。
概念間的垂直空白區隔
幾乎所有程式碼都是由上而下,由左至右。 每一行程式碼都代表一個表達式或某個程式子句,還有每一段程式碼都代表一個完整的思緒。
應該用空白行來分隔這些思緒
每一個空白行代表一個視覺上的提示,提示著空白行的後方將接續一個新而不同的概念。所以人的目光會被吸引到空白後的第一行。
垂直密度
垂直密度意味著密切相關的程度。
如果一群程式碼之間如果密切相關的話,它們就該是垂直緊密的。
垂直距離
在程式的垂直編排上,具有極度類似概念的應該盡可能地靠近。(很明顯,這項準則在同概念,但分散於不同檔案的情況下並不適用。但除非你有個好理由,否則相近的概念不應該分散在不同的檔案,這也是避免使用protected的理由之一)
變數宣告應該盡可能靠近被使用的地方
實體變數應該被宣告在類別的上方
(C++中通常放在類別的最下方,Java通常放在類別的最上方)
依照慣例放置,讀者就比較知道該去哪裡找 ~
相依的函式應該盡可能靠近,高階的在上方,低階的在下方(垂直的順序),這樣可以更容易尋找,藉此增加可讀性。
概念相似性的也應該盡可能靠近,例如:
水平的編排
空白有兩種用意,一種是為了突出,一種是強調運算子的優先性。
在設定運算子附近都加空白,用來突出 左邊 跟 右邊。
方法名稱和旁邊的() 要貼著,()內的參數也要貼著,因為函式和參數高度相關。
,
後留空白是用來突出各個不同的參數。
因為乘法的優先權高於加減法,所以乘法運算子的旁邊沒有空白。
(-b + Math.sqrt(determinant)) / (2*a)
(水平的對齊)
不需要做,這會造成讀者聚焦在錯誤的地方,而忽略某些東西。
縮排
一個原始檔是個階層架構
檔案 > 類別 > 方法 > 程式區塊
母程式區塊 > 子程式區塊
每一個階層都是一個視野(scope)
在某些情況下,while、for的程式區塊會是空白的,這時還是換行、縮排、留分號
重視團隊的共同準則
一致的風格,可以增加可讀性。
倘若一個軟體系統混合了各種不同個人風格的程式碼,會增加閱讀程式碼的複雜性。
Uncle Bob的編排準則
上大括號不會換行
單行if for 會省略大括號
Last updated