如果你將源碼作為產品發布,就需要確認它是否被很好地打包並且清晰無誤,一如你已構建的其他任何產品。
作為軟件設計師,代碼即是產品;不僅需要實現功能,還需有“優美、大方”的外表。
標識符命名法,標識符命名法最主要有4種:
1、駝峰(Camel)命名法:又稱小駝峰命名法,除首單詞外,其余所有單詞的第一個字母大寫。
2、帕斯卡(pascal)命名法:又稱大駝峰命名法,所有單詞的第一個字母大寫
3、下划線命名法:單詞與單詞間用下划線做間隔。
4、匈牙利命名法:廣泛應用於微軟編程環境中,在以Pascal命名法的變量前附加小寫序列說明該變量的類型。變量的取名方式為:<scope_> + <prefix_> + <qualifier>分別表示:范圍前綴、類型前綴、限定詞。
個人覺得標識符命名原則:盡可能的用最少的字符而又能完整的表達標識符的含義。
縮寫原則,比較常見的有3種:
1. 較短的單詞可去掉“元音”形成縮寫;
2. 較長的單詞可取單詞的頭幾個字母形成縮寫;
3. 使用約定俗成的縮寫方式;
如:
average --> avg background --> bg buffer --> buf control --> ctrl
delete --> del document --> doc error --> err escape --> esc
increment --> inc infomation --> info image --> img initial --> init
internationalization --> i18N length --> len library --> lib message --> msg
password --> pwd position --> pos server --> srv string --> str temp --> tmp
window--> wnd/win context --> ctx configuration --> cfg compare --> cmp
clock --> clk clear --> clr device --> dev disable --> dis
display --> disp enable --> en function --> func maximum --> max
minimun --> min parameter --> param
用正確的反義詞組命名具有互斥意義的變量或相反動作的方法:
add/remove begin/end create/destroy insert/delete
first/last get/set increment/decrement put/get
add/delete lock/unlock open/close min/max
start/stop next/previous source/target show/hide
send/receive source/destination
包命名規范
采用反域名命名規則,全部使用小寫字母,一級和二級包名固定為:com.james;三級包名根據應用進行命名,如:factorytest...四級包名為模塊名或層級名。
工程中的Java文件分包:
com.james.adapter:Adapter類
com.james.domain:實體類,對象類
com.james.bean:元素類
com.james.utils:工具類
com.james.ui:視圖類
com.james.activity:頁面用到的Activity類
com.james.base:Android應用中使用到的基類
com.james.db:數據庫操作類
com.james.view:自定義的View類
com.james.service:服務類
com.james.broadcast:廣播類
com.james.constant: 常量字段類
com.james.widget: UI類
com.james.activity: Activity類
類(文件)、接口(文件)、方法的命名規范
類命名采用名詞,首字母大寫,避免使用單詞的縮寫(除非是總所周知的)--- Class Person
activity類:以Activity為后綴標識,如WelcomActivity歡迎頁面;
Adapter類:以Adapter為后綴標識,如NewDetailAdapter新聞詳情適配器;Adapter文件命名規范:負責提供數據,為數據適配器。每個類命名為:界面名+Adapter,如MainItemAdapter
Tools或Manager類:常用的工具或管理類,如ThreadPoolManager類,LogTools日志工具類;
DBHelpter類:數據庫類,如NewDBHelper類,新聞數據庫類;
Service類:服務類,如TimeService類,時間服務類;
ContentProvider類:以Provider為后綴標識,內容提供類;
基類:以Base開頭,如BaseActivity,BaseFragment類;
接口命名采用形容詞或副詞,首字母同樣大寫,多以-able或-ible結尾 --- Interface Runnable
接口名前面需要加上I,以表明此名字為接口。
對於回調接口:實現Observer模式的接口,回調接口名稱以Observer結尾;與Android相關的接口以Listener結尾;從NDK回調回Java的代碼函數可以Callback結尾。
方法名采用動詞和名詞的組合形式,第一個單詞一般是動詞,采用匈牙利式的命名規范;若方法返回或設置成員變量的值,使用 getXxx()、setXxx();若返回的是boolean類型的值,一般采用is作為前綴 --- isCancel isRunning
initXxx():初始化相關的方法,使用init為前綴標識,如初始化布局方法initView();
isXxx()或checkXxx():該方法返回值為boolean;
getXxx():返回某個值得方法;
processXxx():對數據進行處理的方法;
saveXxx():與保存數據相關的方法;
變量命名規范
首字母小寫,其他單詞首字母大寫,采用匈牙利式變量命名法 --- int indexCount;
盡量使用短而且有意義的單詞(避免使用縮寫) --- boolean isThreadStop;
單字符的變量名一般只用於生命期非常短暫的變量 --- int i, k;
如果變量是集合,則變量名用復數 --- int[] numbers;
類內部的屬性變量一般加前綴m,后面跟上變量屬性和功能屬性 --- Button mBtnStart;
非公有、非靜態的變量以m開頭;靜態變量以s開頭;其他變量以小寫字母開頭。
所有常量名均大寫,使用“_”間隔 --- int MAX_NUMBER;
與布局相關的控件變量命名規范
在為Android中的布局、控件的變量命名時經常會使用到一些縮寫,常見縮寫如下:
Llay --> LinearLayout
Rlay --> RelativeLayout
Tlay --> TableLayout
Sv --> ScrollView
Btn --> Button
Iv --> ImageView
Tv --> TextView
Et --> EditText
Mp --> MapView
Cb --> CheckBox
Rg --> RadioGroup
Rb --> RadioButton
Sp --> Spinner
Gv --> GridView
Lv –> ListView
類中的控件變量名必須與.xml布局id保持一致。
若控件變量為類的字段,以m開頭;
控件變量名命名規則:類型+功能。如:mBtnBeginTest...
對象類變在方法體結束后,手動設置為null,以利於資源回收。
不要使用原義數字或原義字符串,而是使用命名常量,以便於維護。如NUM_DAYS_IN_WEEK
xml文件命名規范
res/layout文件夾下的.xml文件,統一用小寫和下划線“_”組合命名 --> 模塊名_功能名.xml
res/drawable文件中的資源:統一用小寫和下划線“_”組合命名 --> 待使用文件名_邏輯名稱,main_default.png
UI類文件命名規范:顯示每個UI界面,每個類命名為:XxxActivity;同時界面類名和相應的.xml文件相同。如:Login.xml對應的類名為LoginActivity。
.xml布局文件全部采用小寫,使用下划線命名;
adapter的子布局:功能模塊_item.xml,如:main_item.xml
資源文件命名規范
資源文件(drawable文件夾下的文件),全部小寫,采用下滑線的形式命名。
btn_功能_說明:為按鍵命名
bg_功能_說明:為背景命名
def_功能_說明:為默認的資源文件命名
icon_功能_說明:為圖標命名
命名后綴:
select:圖片狀態,代表選中狀態
unselect:圖標狀態,代表未選中狀態
...
.xml布局文件中控件id命名規范
view縮寫_模塊名稱_view的邏輯名稱
首個單詞為控件類型的縮寫,其后為.xml文件的文件名,最后為控件功能名 ---> iv_login_logo
Android應用程序中常量定義
類中定義一些常量,如字符串常量或字符串常量,要定義為全局變量。
public static final int MENU_ABOUT= 0;
字符串常量可以定義在/res/values/strings.xml中,字符串名稱的首字母小寫,單詞之間用“_”分割,前者為.xml文件名(用途),后者為其功能。
.xml文件中的尺寸參數定義在/res/values/dimens.xml文件中,首字母小寫,單詞之間用“_”間隔;首個單詞為此控件所屬xml文件名,其二為控件id,其三為控件屬性。
代碼注釋
源代碼中盡量避免連續多行,應根據功能使用空行把代碼適當地分段,代碼段功能盡量清晰;如不能在30秒內理解代碼功能,應為之添加注釋予以說明。
源程序中要有適當的注釋。
注釋有助於裂解代碼,有效的注釋是指在代碼的功能、意圖層次上進行注釋,提供有用的、額外的信息,而不是代碼表面意義的簡單重復。
包含在“{}”中代碼塊的結束處要進行注釋,便於閱讀。特別是多分支、多重嵌套的條件語句或循環語句。對分支語句(條件分支、循環語句)必須編寫注釋。
代碼格式
一般禁止使用制表符,必須使用空格進行縮進。一個制表符使用四個空格替代。
不同邏輯程序塊之間要使用空行分割。空行起着分割程序段落的作用,適當的空行可以使程序的布局更加清晰。
源代碼嚴格遵循一致的縮進規則。
錯誤處理規范
Log的使用規范:
項目中使用自定義的Log輸出函數,此函數的參數與Android的Log函數一致,可以根據常量控制是使用標准Log輸出,還是寫入到文件。
與之對應的條件編譯:
為了使得最終編譯的release版本不包含有Log信息,一般使用以下的做法:先定義獨立的DebugFlag類:
在需要輸出Log的時候,使用如下方式:
因為所定義的常量都是final類型的,若把這些常量設置為false,則編譯器會優化,移除與輸出Log相關的代碼。
Android項目命名規范
一般是自己懂得嚴格命名規范對程序員的意義,能夠參考Google Android SDK等優秀開源庫的命名規范或者其他;此外在參與開發時,需要遵循統一命名規范,還需要對統一的規范加以說明。總之,需要做方面的工作:其一、養成遵循嚴格的命名規范的習慣;其二、以注釋的形式統一說明自己或團隊的命名規范。以下對我了解到的命名規范釋,以后會在編程過程中逐步養成習慣,並延續這些習慣。
1.標識符命名法和英文縮寫規范
標識符命名法和英文縮寫規則是整個Android項目命名規范的基礎,而靈活使用英文中的各類詞性,比如:名詞、動詞、形容詞和副詞等等,都能夠為程序員帶來更多的可用信息,而不至於拿到一個控件或資源后猜測不出有什么用途。
1.1.標識符命名法
標識符命名法主要有四種:
其一:駝峰命名法,除首單詞外,其余所有單詞的第一個字母大寫;
其二:帕斯卡命名法,所有單詞的第一個字母大寫;
其三:下划線命名法,單詞與單詞之間用下划線做間隔;
其四:匈牙利命名法,應用於微軟編程環境中,變量取名方式:<name_scope_>+<type_prefix_>+<qualifier>分別表示范圍前綴、類型前綴和變量限定詞。
標識符命名法實例說明:
1.2.英文縮寫
英文縮寫原則:
其一:較短的單詞可通過去掉“元音”形成縮寫;
其二:較長的單詞可取單詞的頭幾個字母形成縮寫;
其三:可以使用約定俗成的英文單詞縮寫。
常見英文縮寫實例說明:
2.命名規范
2.1.包命名規范——Package
包名:采用反域名命名規則,全部使用小寫字母。一級包名為com,二級包名為groupname(可以是公司或個人命名取的名詞),三級包名根據應用程序名來取名,四級包名為模塊名或層級名。比如:com.itheima.myapplicationname,表示itheima機構寫的應用程序包名。
包名中涉及到的單詞均使用英文名詞。
包名命名規則舉例:
com.xxx.xxx.activity:頁面用到的Activity類,面向於用戶界面層;
com.xxx.xxx.base:頁面中每個Activity類共享的數據(基礎共享的類);
com.xxx.xxx.adapter:頁面用到的Adapter類;
com.xxx.xxx.tools/utils:公共工具方法類;
com.xxx.xxx.bean/entity/domain:元素類,抽取出的JavaBean;
com.xxx.xxx.db:數據庫操作類;
com.xxx.xxx.view/ui:自定義的View類;
com.xxx.xxx.service:Service服務;
com.xxx.xxx.broadcast:Broadcast服務;
2.2.類名規范——Class
類名必須是名詞,常采用帕斯卡命名規則(每個單詞的首字母都必須大寫),盡量避免縮寫;
除非是約定俗成的名稱,類名稱中包含單詞縮寫的每個字母均應大寫或者是首字母大寫,例如:URL、HTML、HTTP等。
類名規范舉例說明:
Activity類:WelcomeActivity、CourseActivity等;
Adapter類:NewDetailAdatper等;
公共方法類:ThreadPoolManager、LogTools等;
數據庫類:NewDBHelper等;
Service類:TimeService等;
BroadcastReceiver類:TimeBroadcastReceiver等;
2.3.接口規范——Interface
接口命名規范和類規范一樣采用帕斯卡命名規范,多以-able或-ible結尾(形容詞或者副詞),用以表示具備的一種功能,如Runnable、Accessible等。
2.4.方法規范——method
常見於動詞或者動名詞,采用駝峰命名法,如onCreate()等。
例如:
initXxx():初始化相關方法,使用init-作為前綴,例如:初始化布局initView();
isXxx():isXxxx()或者checkXxx()返回值為指定類型,使用is-或者check-為前綴;
getXxx():返回某種類型的值,使用get-為前綴;
processXxx():對數據進行處理,以process-為前綴;
displayXxx():彈出提示框或提示信息,以display-為前綴;
saveXxx():保存數據相關的方法,以save-為前綴;
resetXxx():對數據重置,或者是界面重置,使用reset-為前綴;
clearXxx():清除操作相關,使用clear-為前綴;
drawXxx():繪制數據或效果相關,使用draw-為前綴。
2.5.變量——variety
Android中變量的命名都采用駝峰命名規范,常見於名詞。
2.5.1.普通變量命名規范
在需要表示一組變量的情況中,結尾處使用統一的量詞,可以創建更加統一的變量,比如:
_First表示一組變量中的第一個;
_Last表示一組變量中的最后一個;
_Next表示一組變量中的下一個;
_Pre表示一組變量中的上一個;
_Cur表示一組變量中的當前變量;
2.5.2.控件變量命名規范
控件變量采用駝峰命名法,且類中的控件名稱必須和.xml布局文件中的id保持一致;
此外,如果該變量是全局的,應該在其之前加上m,一般遵循:控件類型_功能的模式,例如:mTvVersion表示與具有Version功能的TextView控件相對應的全局變量名。
控件變量位於某個.xml文件對應的.java文件中,該Java文件的內容以及命名內容輸出了詳細的關於控件執行的邏輯信息,在對控件命名時只需要給出控件的類型及其功能即可,業務邏輯可以省略。
2.6.常量——CONSTANT
常量全部用大寫,采用下划線命名法,常使用名詞。
比如,使用符號常量值代替字面值,將有意義的信息帶給程序員。
MIN_WIDTH表示最小的寬度值;
RESULT_PARSE_JSON_EXCEPTION;
RESULT_SUCCESS;
RESULT_NETWORK_EXCEPTION;
RESULT_NO_DATA;
代碼中不允許出現直接硬編碼的字面常量,如果是控件上顯示的文本,必須放在/res/values/string.xml資源文件中;如果是代碼中用到的常量字符串,必須定義成public static final String類型的常量值。
在Activit之間傳遞的參數,intent.putExtra(key, value)使用的key值也應該統一定義為靜態常量,不能直接硬編碼在代碼中。
2.7.資源文件及其控件命名規范——resource&&id
資源文件主要指存放在/res目錄下的文件,其命名全部采用小寫,用下划線命名法。
2.7.1.Layout資源文件
Layout資源文件有多種,每種文件的命名規范均使用文件功能開頭,如activity-、fragment-等。
activity資源文件:activity_description1_description2.xml;
fragment資源文件:fragment_description1_description2.xml;
drawable資源文件:controlName_description1_description2_selector.xml,其中controlName表示該資源要用在什么類型的控件上,例如:如果是按鍵的圖片切換,則使用button_bg_sendmessage_selector.xml;selector表示該資源的形式,還比如:shape等。
顏色值的命名:color_description以color為前綴,description既可以是該顏色的功能描述,也可以是具體的顏色。例如:color_white、color_grey、color_button_pressed等。
2.7.2.控件的ID命名規范
參考模式:業務邏輯_控件類型_功能。
例如:splash_tv_version:表示該控件是使用splash業務邏輯中具有版本控制功能的TextView;user_btn_register表示該控件是使用在user業務中具有register功能的Button。
此外需要注意的是:.xml文件中的控件ID必須和.java文件中對應的控件對象名保持一致。
3.優秀資源參考——Google
Google在Android系統開發時使用的是什么命名規范?