Android代碼規范:命名規范

原文:http://android.jobbole.com/83659/
編碼規范對于程序員尤為重要,可以有效的幫助我們進行code review,提高代碼的可讀性,讓其他人更快更徹底的理解代碼。

一個軟件的生命周期中,80%的花費都在于維護以及新功能的迭代,很多的時候都需要閱讀代碼,讀自己以前寫的代碼,讀別人寫的代碼,這樣規范的代碼優勢就顯示出來了,符合規范的代碼可以讓人簡單快速的理解理解代碼的意圖。

代碼規范先從命名規范開始,Android的命名規范主要涉及:Java源代碼,xml文件,圖片資源。

包名

首先說下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****。
總結,包名一般是以反轉域名開始,后面跟有項目名稱(縮寫,也可以沒有)。
后面可以采用的區分包名方式:

  1. 按照模塊 com.example.project.user
  2. 按照層級區分 com.example.project.activity
  3. 層級下也可以在區分模塊 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() 顯示某某信息
  • draswXX() 繪制數據或者效果

另外對于方法的其他一些規范:

  • 方法的參數盡可能不超過4個,需要更多的參數的時候可以采用class的方法
  • 方法參數中盡量少使用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命名規則都是才是字母小寫,使用下劃線分割的原則。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • 編碼規范對于程序員尤為重要,可以有效的幫助我們進行code review,提高代碼的可讀性,讓其他人更快的理解代碼...
    姜家志閱讀 2,233評論 0 7
  • 編碼規范對于程序員尤為重要,可以有效的幫助我們進行code review,提高代碼的可讀性,讓其他人更快的理解代碼...
    allencaicai閱讀 572評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,825評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,722評論 25 708
  • 前幾天,認識一位新朋友,剛見面聊了沒幾句,對方就問我:“你結過婚嗎?” 聽到這個問題的我一臉驚愕地看著他說:“為什...
    赫曼妮閱讀 1,111評論 4 7