若是你將源碼做爲產品發佈,就須要確認它是否被很好地打包而且清晰無誤,一如你已構建的其餘任何產品。java
做爲軟件設計師,代碼便是產品;不只須要實現功能,還需有「優美、大方」的外表。程序員
標識符命名法,標識符命名法最主要有4種:數據庫
一、駝峯(Camel)命名法:又稱小駝峯命名法,除首單詞外,其他全部單詞的第一個字母大寫。編程
二、帕斯卡(pascal)命名法:又稱大駝峯命名法,全部單詞的第一個字母大寫app
三、下劃線命名法:單詞與單詞間用下劃線作間隔。dom
四、匈牙利命名法:普遍應用於微軟編程環境中,在以Pascal命名法的變量前附加小寫序列說明該變量的類型。變量的取名方式爲:<scope_> + <prefix_> + <qualifier>分別表示:範圍前綴、類型前綴、限定詞。ide
我的以爲標識符命名原則:儘量的用最少的字符而又能完整的表達標識符的含義。函數
縮寫原則,比較常見的有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、養成遵循嚴格的命名規範的習慣;其2、以註釋的形式統一說明本身或團隊的命名規範。如下對我瞭解到的命名規範釋,之後會在編程過程當中逐步養成習慣,並延續這些習慣。
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系統開發時使用的是什麼命名規範?