前言
最近在看阿裡的《碼出高效 Java開發手冊》一書,讀到代碼風格這一章節。工作了幾年,再看這一章節發現有些代碼規範也沒有做到。大公司對于代碼開發規範比較重視,對大部分的小公司而言就沒有那麼關注了。而這些編碼習慣會跟随你一輩子,在我看來,好的編碼習慣會有助提升你代碼的可讀性,維護性,更是一個優秀的程式員必備的素質。
命名規範
-
,但是類名如果有複數含義,則可以使用複數形式。包名同一使用小寫,點分隔符之間有且僅有一個自然語義的英文單詞。包名統一使用單數形式
-
;異常類命名使用Exception結尾,測試類命名以它要測試的類名開始,以Test結尾。抽象類命名使用Abstract或Base開頭
-
類型與中括号緊挨相連來定義數組。
- 枚舉類名帶上Enum字尾,
。枚舉成員名稱需要全大寫,單詞間用下劃線隔開
命名需要做到望文知義,進而減少注釋的内容,達到自然解釋的作用。而不規範的縮寫會導緻代碼了解困難,更大的罪過會把其他人引導到一個錯誤的方向上。例如把condition縮寫成condi,類似的縮寫會降低代碼的可讀性。
一般的情況下,變量的命名需要滿足小駝峰格式。但存在一種特殊情況,
在定義類成員變量的時候,特别是在POJO類中,針對布爾類型的變量,命名不要加is字首,否則部門架構解析會引起序列化錯誤
。例如,定義辨別是否删除的時候,
成員變量為Boolean isDeleted,它的getter方法也是isDelete(),在架構反向解析的時候,“誤以為”對應的屬性名是delete,導緻擷取不到屬性,進而抛出異常
。但是
在資料庫建表中,推薦表達是與否的值采用is_xxx的命名方式
,針對此種情況,需要在中設定,将資料表中的is_xxx字段映射到POJO類中的屬性Xxx
代碼展示風格
縮進
書中
推薦使用4個空格縮進,禁止使用Tab鍵
。因為在不同編輯器對Tab的解析不一緻,是以視覺體驗會有差異,而空格在不同編輯器之間是相容的。
空格
空格的使用又有如下規定:
- 任何二目,三目運算符的左右兩邊都必須加一個空格
-
注釋的雙斜杠與注釋内容之間有且僅有一個空格
-
方法參數在定義和傳入時,多個參數逗号後面必須加空格
- 如果大括号中内容為空,則簡潔的攜程{}即可,大括号内無需換行和空格
- 左右小括号與括号内部的相鄰字元之間不要出現空格
-
左大括号前需要加空格
示例:
try{
// 任何二目,三目運算符的左右兩邊都必須加一個空格
boolean condition = (count == 0) ? true : false;
// 關鍵詞if與左側小括号之間必須有一個空格
// 左大括号前需要加空格,左大括号後必須換行
if (condition) {
System.out.println("hello");
// else 的前後需要加空格
} else {
System.out.println("world");
}
// 如果大括号中内容為空,則簡潔的攜程{}即可,大括号内無需換行和空格
} catch (Exception e) {}
// 方法參數在定義和傳入時,多個參數逗号後面必須加空格
String result = getString(one, two, three);
換行
規定單行字元數不超過120個,超出則要換行
,換行遵循如下的規定:
- 運算符與下文一起換行
- 方法調用的點符号與下文一起換行
- 方法調用中的多個參數需要換行時,在逗号後換行
- 在括号前面不要換行
方法行數
約定一個方法内一般不超過80行
,不包括注釋、換行、空行、左右大括号。隻有5%不到的方法才會超過80行,而這些方法通常都還有優化的空間。
控制語句
- 在if、else、while、do-while等語句中必須使用大括号。及時隻有一行代碼,不能省略大括号。
-
在條件表達式中不允許有複制操作,也不允許在判斷表達式中出現複雜的邏輯組合。
- 多層嵌套不超過三層,
。超過三層的if-else邏輯判斷代碼,推薦使用衛語句、政策模式、狀态模式等來實作
- 避免采用取反邏輯運算符。比如if(x<10)表達x小于10,而不能使用if(!(x>=10))。
衛語句示例:
衛語句就是把複雜的條件表達式拆分成多個條件表達式,比如一個很複雜的表達式,嵌套了好幾層的if - then-else語句,轉換為多個if語句,實作它的邏輯,這多條的if語句就是衛語句.
if (obj != null) {
doSomething();
}
轉換成衛語句以後的代碼如下:
if (obj == null) {
return;
}
doSomething();
代碼注釋
類、類屬性、和類方法的注釋必須遵循Javadoc規範,使用文檔注釋 的格式。
- 枚舉的注釋是必要的,它的代碼極其穩定。如果定義和使用出現錯誤,通常影響較大。
- 注釋的内容不僅限于解釋屬性值的含義,還可以包括注意事項、業務邏輯。
- 枚舉類的删除或者修改都存在很大的風險。不可直接删除過時屬性,需要标注為過時,同時注釋說明過時的邏輯考慮和業務背景
單行注釋和多行注釋,特别強調
此類注釋不允許寫在代碼後方
,必須寫在代碼上方,這是為了避免注釋的參差不齊,導緻代碼版式混亂。