Android 程式碼規範 - 命名規範

姜家志發表於2017-04-09

編碼規範對於程式設計師尤為重要,可以有效的幫助我們進行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.xmlcolors.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/…

相關文章