編碼規(guī)范對于程序員尤為重要峦阁,可以有效的幫助我們進行code review
,提高代碼的可讀性,讓其他人更快的理解代碼婶博。
一個軟件的生命周期中,80%的花費都在于維護以及新功能的迭代荧飞,很多的時候都需要閱讀代碼凡人,讀自己以前寫的代碼,讀別人寫的代碼叹阔,這樣規(guī)范代碼的優(yōu)勢就顯示出來了挠轴,符合規(guī)范的代碼可以讓人簡單快速的理解理解代碼的意圖。
代碼規(guī)范先從命名規(guī)范開始耳幢,Android的命名規(guī)范主要涉及:
- Java源代碼
- xml文件
- 圖片等資源文件
先從Java源代碼開始說起岸晦,要說Java源代碼不得不先說下包名的命名規(guī)范。
包名
Android包名的命名規(guī)則睛藻,Andorid的包名一般采用域名的反轉(zhuǎn)启上,單詞全小寫。
比如域名為www.example.com
的包名為com.example
,省略www修档。
包名開始是一個頂級域名碧绞,比如com,cn,org等,包名使用.
做為分隔符吱窝。第二位一般是二級域名讥邻,也可以根據(jù)不同機構(gòu)各自的命名。
后面的命名可以用部門院峡,項目等進行區(qū)分(也可以沒有),例如:
com.example.project
在項目內(nèi)可以根據(jù)功能不同兴使,按照模塊劃分不同的包名,com.example.project.user
表示用戶模塊。
也可以根據(jù)層級的不同而劃分不同的包名,比如:com.example.prokect.activity
,就是Acitivity相關的包照激。
當然也可以在不同層級里面再按照模塊劃分包名发魄,比如:com.example.project.activity.user
,表示和用戶有關的Activity。
總結(jié),包名一般是以反轉(zhuǎn)域名開始励幼,后面跟有項目名稱(縮寫汰寓,也可以沒有)。
后面可以采用的區(qū)分包名方式:
- 按照模塊
com.example.project.user
- 按照層級區(qū)分
com.example.project.activity
- 層級下也可以在區(qū)分模塊
com.example.project.activity.user
類和接口
類名是一個或多個單詞組成苹粟,采用大駝峰命名有滑,盡量要使類名簡潔且利于描述,例如:SignInActivity
,類名規(guī)則如下:
- 大駝峰命名
- 簡潔而富有表達性
- 盡量不使用縮寫(廣泛使用的單詞除外嵌削,比如URL,XML...)
- 多單詞中采用
名詞+動詞
的方式命名:LocationManage
- 對于縮寫單詞要全部大寫比如:
XMLManage
一個類如果繼承了Android的組件草丧,需在使用該組件的名稱作為后綴表窘,這樣容易區(qū)分該類的作用偶妖,比如:SgnInActivity
,UserInfoFragment
,FileUploadService
...
接口一般使用I開頭螟蒸,采用大駝峰命名規(guī)則,比如:IPullToRefresh
艇劫。
變量
Android變量分為三種:成員變量,靜態(tài)變量和常量吼驶。
-
成員變量
成員變量一般采用小駝峰命名規(guī)則,第一單詞的首字母小寫港准,其后的首字母大寫旨剥。變量名一般不使用_和$開頭。例如:
private Intent cropIntent;
變量名應簡短且易于描述浅缸,選用規(guī)則盡量簡單轨帜,易于記憶和聯(lián)想。
盡量避免單個字符的變量名衩椒,除非是用于一次性的臨時變量,臨時的整形變量一般命名為** i,j,k,m,n蚌父。字符型的變量一般使用c,d,e**。
對于View
變量的命名規(guī)則毛萌,如果View
是一個單詞的苟弛,采用第一個單詞小寫的方式+對應View的描述進行,例如:
private View viewUserInfo;
如果是兩個單詞組成的View,比如:TextView
,一般采用縮寫的方式,例如:
private TextView tvUserName;
一般情況下Button
縮寫為:btn阁将。
-
靜態(tài)變量
為了可以很方便的區(qū)分靜態(tài)變量膏秫,靜態(tài)變量的命名一般采用小寫的s開頭,后面單詞的命名規(guī)則和成員變量
保持一致做盅,例如:
private static Map<String, String> sCacheStrings;
-
常量
常量命名規(guī)則一般是所有的單詞都是大寫缤削,中間使用_(下劃線)分割,例如:
private static final float SCALE_RATE = 1.25f;
代碼中不允許出現(xiàn)單獨的字符串或數(shù)字常量吹榴,比如xx.equals("1")
,單獨的字符串或數(shù)字不利于理解和后期的維護亭敢。如果需要使用數(shù)據(jù)或字符,請按照他們的含義封裝成靜態(tài)常量图筹,或者使用枚舉帅刀,for語句除外让腹。
方法
方法命名規(guī)則采用小駝峰命名法例如:onCreate(),onRun(),方法名一般采用動詞或者動名詞扣溺。
一般使用的方法名前綴骇窍。
- getXX()返回某個值的方法
- initXX() 初始化相關方法,比如初始化布局:initView()
- checkXX()和isXX() 方法為boolean值的時候使用is或者check為前綴
- saveXX() 保存數(shù)據(jù)
- clearXX()和removeXX() 清除數(shù)據(jù)
- updateXX() 更新數(shù)據(jù)
- processXX() 對數(shù)據(jù)進行處理
- dispalyXX() 顯示某某信息
- drawXX() 繪制數(shù)據(jù)或者效果
另外對于方法的其他一些規(guī)范:
- 方法的參數(shù)盡可能不超過4個锥余,需要更多的參數(shù)的時候可以是使用類的作為方法的參數(shù)
- 方法參數(shù)中盡量少使用boolean,使用boolean傳參不利于代碼的閱讀
- 方法盡量不超過15行像鸡,方法過長,說明當前方法業(yè)務邏輯過于復雜哈恰,需要進行方法拆分
- 一個方法只做一件事,
- 如果一個方法返回的是一個錯誤碼志群,可以使用異常
- 不使用try catch 處理業(yè)務邏輯
- 盡可能不實用null着绷,替代為異常或者使用空的變量锌云,比如
Collections.emptyList()
Layout
Layout的命名規(guī)則需要和使用他們的組件對應荠医,方便查找和維護,比如我們在創(chuàng)建一個用戶信息的UserInfoActivity
桑涎,對應的Layout的命名就應該是activity_user_info.xml
彬向。
對應Andorid組件的Layout
命名規(guī)則:
- 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
的資源命名,字母全部小寫里烦,多個單詞之間使用_(下劃線)分割.
比如:
<string name="app_name">example</string>
建議color的命名中體現(xiàn)其ARGB
值,比如:
<color name="color_feb749">#feb749</color>
這樣的寫法對于代碼提示更加的友好,有利于對照標注圖查找顏色值禁谦。
id命名
layout中使用的id
的單詞要全部小寫胁黑,單詞之間使用下劃線分割,使用名詞或者名詞詞組州泊,應該通過id的命名可以直接理解當前的View
要實現(xiàn)的功能.
例如:
@+id/tv_user_name_show
id命名的第一個單詞使用View的縮寫丧蘸,如果View只是一個單詞,縮寫就是當前單詞遥皂。一般Button
的縮寫為:btn力喷。
Drawable命名
Drawable
的命名規(guī)則根據(jù)使用的控件來命名,控件的縮寫在前面渴肉,后面使用表示其功能的一個或者多個單詞冗懦,中間使用使用_下劃線分割。比如:
- Action bar使用
ab_
仇祭,比如:ab_stacked.png
- Button 使用
btn_
- Dialgo 使用
dialog_
- Divide 使用
divider_
- Icon 使用
ic_
- Menu 使用
menu_
- Notification使用
notification_
- Tabs 使用
tab_
Drawable
是有多個狀態(tài)的披蕉,在命名中體現(xiàn)出狀態(tài)的不同,比如:
- Normal 對應
_normal
結(jié)尾,比如btn_order_normal.9.png
- Pressed 對應
_pressed
結(jié)尾 - Focused 對應
_focused
結(jié)尾 - Disabled 對應
_disabled
結(jié)尾 - Selected 對應
_selected
結(jié)尾
其他資源文件的命名需要遵守Android的規(guī)范即可没讲,比如arrays.xml
數(shù)組文件眯娱,dimens.xml
分辨的配置,style.xml
樣式的配置爬凑,資源文件的ID命名規(guī)則都是字母小寫徙缴,使用下劃線分割的原則。
參考:
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