Android程式碼規範-命名規範

NO IMAGE

編碼規範對於程式設計師尤為重要,可以有效的幫助我們進行code review,提高程式碼的可讀性,讓其他人更快的理解程式碼。
一個軟體的生命週期中,80%的花費都在於維護以及新功能的迭代,很多的時候都需要閱讀程式碼,讀自己以前寫的程式碼,讀別人寫的程式碼,這樣規範程式碼的優勢就顯示出來了,符合規範的程式碼可以讓人簡單快速的理解理解程式碼的意圖。
程式碼規範先從命名規範開始,Android的命名規範主要涉及:

  • Java原始碼

  • xml檔案

  • 圖片等資原始檔

先從Java原始碼開始說起,要說Java原始碼不得不先說下包名的命名規範。

包名

Android包名的命名規則,Andorid的包名一般採用域名的反轉,單詞全小寫。
比如域名為www.example.com的包名為com.example,省略www
包名開始是一個頂級域名,比如com,cn,org等,包名使用.做為分隔符。第二位一般是二級域名,也可以根據不同機構各自的命名。
後面的命名可以用部門,專案等進行區分(也可以沒有),例如:

com.example.project

在專案內可以根據功能不同,按照模組劃分不同的包名,com.example.project.user表示使用者模組。
也可以根據層級的不同而劃分不同的包名,比如:com.example.prokect.activity,就是Acitivity相關的包。
當然也可以在不同層級裡面再按照模組劃分包名,比如:com.example.project.activity.user,表示和使用者有關的Activity。


總結,包名一般是以反轉域名開始,後面跟有專案名稱(縮寫,也可以沒有)。
後面可以採用的區分包名方式:

  • 按照模組 com.example.project.user

  • 按照層級區分 com.example.project.activity

  • 層級下也可以在區分模組 com.example.project.activity.user

類和介面

類名是一個或多個單片語成,採用大駝峰命名,儘量要使類名簡潔且利於描述,例如:SignInActivity,類名規則如下:

  • 大駝峰命名

  • 簡潔而富有表達性

  • 儘量不使用縮寫(廣泛使用的單詞除外,比如URL,XML…)

  • 多單詞中採用 名詞 動詞的方式命名: LocationManage

  • 對於縮寫單詞要全部大寫比如:XMLManage

一個類如果繼承了Android的元件,需在使用該元件的名稱作為字尾,這樣容易區分該類的作用,比如:SgnInActivity,UserInfoFragment,FileUploadService
介面一般使用I開頭,採用大駝峰命名規則,比如:IPullToRefresh

變數

Android變數分為三種:成員變數,靜態變數和常量。

  • 成員變數

成員變數一般採用小駝峰命名規則,第一單詞的首字母小寫,其後的首字母大寫。變數名一般不使用_$開頭。例如:

private Intent cropIntent;

變數名應簡短且易於描述,選用規則儘量簡單,易於記憶和聯想。
儘量避免單個字元的變數名,除非是用於一次性的臨時變數,臨時的整形變數一般命名為 i,j,k,m,n。字元型的變數一般使用c,d,e
對於View變數的命名規則,如果View是一個單詞的,採用第一個單詞小寫的方式 對應View的描述進行,例如:

private View viewUserInfo;

如果是兩個單片語成的View,比如:TextView,一般採用縮寫的方式,例如:

private TextView tvUserName;

一般情況下Button縮寫為:btn

  • 靜態變數

為了可以很方便的區分靜態變數,靜態變數的命名一般採用小寫的s開頭,後面單詞的命名規則和成員變數保持一致,例如:

private static Map<String, String> sCacheStrings;

  • 常量

常量命名規則一般是所有的單詞都是大寫,中間使用_(下劃線)分割,例如:

private static final float SCALE_RATE = 1.25f;

程式碼中不允許出現單獨的字串或數字常量,比如xx.equals("1"),單獨的字串或數字不利於理解和後期的維護。如果需要使用資料或字元,請按照他們的含義封裝成靜態常量,或者使用列舉,for語句除外。

方法

方法命名規則採用小駝峰命名法例如:onCreate(),onRun(),方法名一般採用動詞或者動名詞。
一般使用的方法名字首。

  • getXX()返回某個值的方法

  • initXX() 初始化相關方法,比如初始化佈局:initView()

  • checkXX()和isXX() 方法為boolean值的時候使用is或者check為字首

  • saveXX() 儲存資料

  • clearXX()和removeXX() 清除資料

  • updateXX() 更新資料

  • processXX() 對資料進行處理

  • dispalyXX() 顯示某某資訊

  • drawXX() 繪製資料或者效果

另外對於方法的其他一些規範:

  • 方法的引數儘可能不超過4個,需要更多的引數的時候可以是使用類的作為方法的引數

  • 方法引數中儘量少使用boolean,使用boolean傳參不利於程式碼的閱讀

  • 方法儘量不超過15行,方法過長,說明當前方法業務邏輯過於複雜,需要進行方法拆分

  • 一個方法只做一件事,

  • 如果一個方法返回的是一個錯誤碼,可以使用異常

  • 不使用try catch 處理業務邏輯

  • 儘可能不實用null,替代為異常或者使用空的變數,比如Collections.emptyList()

Layout

Layout的命名規則需要和使用他們的元件對應,方便查詢和維護,比如我們在建立一個使用者資訊的UserInfoActivity,對應的Layout的命名就應該是activity_user_info.xml
對應Andorid元件的Layout命名規則:

  • Activity  ->   activity_user_info.xml

  • Fragment  ->   fragment_sign_up.xml

  • Dialog    ->   dialog_change_password.xml

  • AdapterView Item  ->  item_user.xml

  • Layout檔案只是佈局檔案的一部分  ->    partial_stats_bar.xml

string和color

專案中使用的string和color的值原則上都是必須放在strings.xmlcolors.xml中,不要放在Java程式碼中,這樣的好處是可複用,提高維護性,減少非必要的程式碼。
xml的資源命名,字母全部小寫,多個單詞之間使用_(下劃線)分割.
比如:

<string name=”app_name”>example</string>

建議color的命名中體現其ARGB值,比如:

<color name=”color_feb749″>#feb749</color>

這樣的寫法對於程式碼提示更加的友好,有利於對照標註圖查詢顏色值。

id命名

layout中使用的id的單詞要全部小寫,單詞之間使用下劃線分割,使用名詞或者名詞片語,應該通過id的命名可以直接理解當前的View要實現的功能.
例如:

@ id/tv_user_name_show

id命名的第一個單詞使用View的縮寫,如果View只是一個單詞,縮寫就是當前單詞。一般Button的縮寫為:btn

Drawable命名

Drawable的命名規則根據使用的控制元件來命名,控制元件的縮寫在前面,後面使用表示其功能的一個或者多個單詞,中間使用使用_下劃線分割。比如:

  • Action bar使用ab_,比如:ab_stacked.png

  • Button 使用btn_

  • Dialgo 使用dialog_ 

  • Divide 使用 divider_ 

  • Icon 使用 ic_

  • Menu 使用menu_

  • Notification使用 notification_

  • Tabs 使用tab_

Drawable是有多個狀態的,在命名中體現出狀態的不同,比如:

  • Normal  對應_normal結尾,比如btn_order_normal.9.png

  • Pressed 對應_pressed結尾

  • Focused 對應_focused結尾

  • Disabled 對應_disabled結尾

  • Selected 對應_selected結尾

其他資原始檔的命名需要遵守Android的規範即可,比如arrays.xml陣列檔案,dimens.xml分辨的配置,style.xml樣式的配置,資原始檔的ID命名規則都是字母小寫,使用下劃線分割的原則。

參考:
https://github.com/ribot/android-guidelines/blob/master/project_and_code_guidelines.md
http://source.android.com/source/code-style.html
https://google.github.io/styleguide/javaguide.html