從一開始接觸編程就多次聽到編程得養成好的編碼習慣。的確,不讓好的編碼成為習慣,也就只能在隨意的代碼風格裡放縱了(網上瀏覽到的代碼是有這樣的吧)。 在網上也看了很多人的總結,學到很多。將其中的部分進行彙總,這次的隨筆大部分只是文字的搬運工,如有誤還請指正。 一.標識符命名(儘量以最少的字元表達完整的含 ...
從一開始接觸編程就多次聽到編程得養成好的編碼習慣。的確,不讓好的編碼成為習慣,也就只能在隨意的代碼風格裡放縱了(網上瀏覽到的代碼是有這樣的吧)。
在網上也看了很多人的總結,學到很多。將其中的部分進行彙總,這次的隨筆大部分只是文字的搬運工,如有誤還請指正。
一.標識符命名(儘量以最少的字元表達完整的含義,但是命名中縮寫使用:儘量不要用縮寫,除非該縮寫是約定俗成的。)
常見的英文單詞縮寫:
1.1 駝峰(Camel)命名法:又稱小駝峰命名法,除首單詞外,其餘所有單詞的第一個字母大寫。
例:touchEvent,用於“方法名”,“變數名”,“參數名”(參數應該避免用單個字元命名。)
1.2 帕斯卡(pascal)命名法:又稱大駝峰命名法,所有單詞的第一個字母大寫。
例:TouchEvent,用於“介面名”、“類名”。
1.3 下劃線命名法:單詞與單詞間用下劃線做間隔。
例:touch_event,用於“常量名”命名(字母全大寫載用下劃線命名,如:TOUCH_DOWN)、“資源文件”、“控制項”及“佈局文件”(字母小寫)等。
1.4.其他。
包(package): 採用反寫功能變數名稱命名規則,即com.xx.xxx.xxxx形式,如:com.tencent.qq.activitys
全部使用小寫字母。一級包名為com,二級包名為xx(一般為公司或個人功能變數名稱),三級包名根據應用進行命名,四級包名為功能模塊名。
二:源文件結構
一個源文件包含(按順序地):
- 許可證或版權信息(如有需要)
- package語句
- import語句
- 一個頂級類(只有一個)
以上每個部分之間用一個空行隔開。
2.1許可證或版權信息
如果一個文件包含許可證或版權信息,那麼它應當被放在文件最前面。插入版權信息參考
2.2 import語句
import不要使用通配符*,即引入同一個包下麵多個class的偷懶寫法。一般不建議這樣寫。
import語句可分為以下幾組,按照這個順序,每組由一個空行分隔:
- 所有的靜態導入獨立成組
com.google
imports(僅當這個源文件是在com.google
包下)- 第三方的包。每個頂級包為一組,字典序。例如:android, com, junit, org, sun
java
importsjavax
imports
組內不空行,按字典序排列。
2.3 類聲明
只有一個頂級類聲明(在與他同名的源文件中)
註:1.類成員順序:每個類應該以某種邏輯去排序它的成員(最好不要簡單的按照時間順序添加到成員最後)。
2.當一個類有多個構造函數,或是多個同名方法,這些函數/方法應該按順序出現在一起,中間不要放進其它函數/方法。
三、格式
3.1大括弧
大括弧與if, else, for, do, while
語句一起使用,即使只有一條語句(或是空),也應該把大括弧寫上。
對於非空塊和塊狀結構:
- 左大括弧前不換行
- 左大括弧後換行
- 右大括弧前換行
- 如果右大括弧是一個語句、函數體或類的終止,則右大括弧後換行; 否則不換行。例如,如果右大括弧後面是else或逗號,則不換行。
return new MyClass() { @Override public void method() { if (condition()) { try { something(); } catch (ProblemException e) { recover(); } } } };
花括弧不要單獨一行,和它前面的代碼同一行。而且,花括弧與前面的代碼之間用一個空格隔開。
public void method() { // Good } public void method() { // Bad } public void method(){ // Bad }
一個空的塊狀結構里什麼也不包含,大括弧可以簡潔地寫成{}
,不需要換行。例外:如果它是一個多塊語句的一部分(if/else 或 try/catch/finally) ,即使大括弧內沒內容,右大括弧也要換行。
示例:
void doNothing() {}
3.2 空格使用
1.if、else、for、switch、while等邏輯關鍵字與後面的語句留一個空格隔開。
// Good if (booleanVariable) { } else { } // Bad if(booleanVariable) { }else { }
2.運算符兩邊各用一個空格隔開
int result = a + b; //Good, = 和 + 兩邊各用一個空格隔開 int result=a+b; //Bad,=和+兩邊沒用空格隔開
3.方法的每個參數之間用一個空格隔開。
public void method(String param1, String param2); // Good,param1後面的逗號與String之間隔了一個空格 method(param1, param2); // Good,方法調用時,param1後面的逗號與param2之間隔了一個空格 method(param1,param2); // Bad,沒有用一個空格隔開
3.3 空行的使用
將邏輯相關的代碼段用空行隔開,以提高可讀性。空行也只空一行,不要空多行。在以下情況需用一個空行:
- 兩個方法之間
- 方法內的兩個邏輯段之間
- 方法內的局部變數和方法的第一條邏輯語句之間
- 常量和變數之間
3.4 當一個表達式無法容納在一行內時,可換行顯示,另起的新行用8個空格縮進。
String str = String.format("%.3f,%.3f,%.3f,", bandGyroscopeEvent.getAngularVelocityX(),
bandGyroscopeEvent.getAngularVelocityY(), bandGyroscopeEvent.getAngularVelocityZ()) + strTimestamp + "\n";
3.5每次只聲明一個變數
不要使用組合聲明,比如
int a, b;//bad //good int a; int b;
3.6 量Android Studio中格式化代碼快捷鍵
CTRL + ALT + L (Win)
OPTION + CMD + L (Mac)
3.7 枚舉類
很多經典的Java書已經看到推薦使用枚舉來代替int常量了,但是在Android開發中不建議使用枚舉,特別是大型的App中,能不用則不用。因為它會犧牲執行的速度和並大幅增加文件體積。也是性能優化中減少OOM(記憶體優化)的一個方面。Android總使用枚舉註解代替枚舉優化代碼。
3.8補充
文字大小的單位統一用sp,元素大小的單位統一用dp。
應用中的字元串統一在strings.xml中定義,然後在代碼和佈局文件中引用。
顏色值統一在colors.xml中定義,然後在代碼和佈局文件中引用。另外,不要在代碼和佈局文件中引用系統的顏色,除了透明。
四、註解
4.1文件頭註釋
文件頂部統一添加版權聲明,聲明的格式如下:
/** * Copyright (c) Microsoft Corporation All rights reserved. */
4.2 類和介面註釋
類和介面統一添加javadoc註釋,格式如下:
/** * 類或介面的描述信息 * * @author ${USER} * @date ${DATE} */
4.3 方法註釋
下麵幾種方法,都必須添加javadoc註釋,說明該方法的用途和參數說明,以及返回值的說明。
- 介面中定義的所有方法
- 抽象類中自定義的抽象方法
- 抽象父類的自定義公用方法
- 工具類的公用方法
/** * 登錄 * * @param loginName 登錄名 * @param password 密碼 * @param listener 回調監聽器 */ public void login(String loginName, String password, ActionCallbackListener<Void> listener);
4.4 變數和常量註釋
- 介面中定義的所有常量
- 公有類的公有常量
- 枚舉類定義的所有枚舉常量
- 實體類的所有屬性變數
本隨筆參考Google Java編程風格指南