編碼規範對於程式設計師尤為重要,可以有效的幫助我們進行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
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.xml
和colors.xml
中,不要放在Java程式碼中,這樣的好處是可複用,提高維護性,減少非必要的程式碼。xml
的資源命名,字母全部小寫,多個單詞之間使用_(下劃線)分割.
比如:
example
建議color的命名中體現其ARGB
值,比如:
#feb749
這樣的寫法對於程式碼提示更加的友好,有利於對照標註圖查詢顏色值。
##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命名規則都是字母小寫,使用下劃線分割的原則。
參考:
github.com/ribot/andro…
source.android.com/source/code…
google.github.io/styleguide/…