程式設計一開始就應該養成的好習慣
有些程式設計規範,學程式設計第一天就應該瞭解,這些習慣比你多學兩章知識來的更為實際,他們甚至可能會直接影響你的程式設計生涯,所以,不要一開始覺得這些習慣都不重要,有很多同學認為等到技術成熟的時候再考慮它們,殊不知,壞習慣一旦養成需要花費多大的經歷才能更正。一開始就對自己要求嚴格一些,慢慢的養成習慣,卻也不覺得這些規範是束縛,而認為是天經地義的事情。
好的程式設計命名習慣不止是可以提高程式碼的可讀性,其實還可以大大提高你的開發效率,例如,Android中各種控制元件的命名,好的命名可以讓你快速的在Activity中找到所要引用的控制元件。不規則的命名會給自己造成不必要的混淆,需要花費一些時間區分這些命名,另外規則的命名還可能會預防命名重複的問題。
這些規則不是靠自己死記硬背出來的,一開始養成好習慣會流淌在程式設計師的血液裡,堅持從第一行程式碼開始,嚴格按照命名規範來執行,久而久之就會覺得這是一件十分正常和合理的事情,一開始是痛苦的,卻也是值得的。
怎麼才算是合理的命名、好的程式設計習慣呢,自己認為的可不一定是合理的,我們需要找到權威的解釋,可以參考官方給出的命名規範和格式,也可以參考一些大公司的程式設計規範,絕對會讓你受益匪淺。網上一些資料也是可以參考的,我整理了一些Android開發方面需要注意的命名和程式設計規範,大家可以參考一下,也可以發表自己的看法,豐富這一文件。
1.java程式碼中不出現中文,最多註釋中可以出現中文(儘量不要用拼音命名啊,那樣顯得太low了!)
2.區域性變數命名、靜態成員變數命名
只能包含字母,單詞首字母出第一個外,都為大寫,其他字母都為小寫。
3.常量命名
只能包含字母和_
,字母全部大寫,單詞之間用_
隔開。(API_KEY)
4.layout中的id命名
命名模式為: view縮寫_模組名稱_view的邏輯名稱(這個比較重要啊!很常用的!可以findViewById()中快速找到控制元件)
view
的縮寫詳情如下:
LayoutView
:lv
RelativeView
:rv
TextView
:tv
ImageView
:iv
ImageButton
:im
Button
:btn
5.activity中的view
變數命名
命名模式為:邏輯名稱+view縮寫(mUserNameTv)
建議:如果layout
檔案很複雜,建議將layout
分成多個模組,每個模組定義一個moduleViewHolder
,其成員變數包含所屬view
6.strings.xml
中的id
命名
命名模式:activity名稱_功能模組名稱_邏輯名稱
/activity名稱_邏輯名稱/common_邏輯名稱
strings.xml
中,使用activity
名稱註釋,將檔案內容區分開來。
7.drawable
中的圖片命名
命名模式:activity名稱_邏輯名稱
/common_邏輯名稱
8.styles.xml
:將layout
中不斷重現的style提煉出通用的style通用元件,放到styles.xml
中;
9.使用layer-list
和selector
10.圖片儘量分拆成多個可重用的圖片
11.服務端可以實現的,就不要放在客戶端
12.引用第三方庫要慎重,避免應用大容量的第三方庫,導致客戶端包非常大
13.處理應用全域性異常和錯誤,將錯誤以郵件的形式傳送給服務端
14.圖片的.9處理(保證拉伸不變形,做背景圖片的一半要處理)
15.使用靜態變數方式實現介面間共享要慎重
16.Log(系統名稱 模組名稱 介面名稱,詳細描述)
17.單元測試(邏輯測試、介面測試)
18.不要重用父類的handler
,對應一個類的handler
也不應該讓其子類用到,否則會導致message.what
衝突
19.activity
中在一個View.OnClickListener
中處理所有的邏輯(switch分支判斷處理)
20.strings.xml
中使用%1$s
實現字串的通配
21.如果多個Activity
中包含共同的UI處理,那麼可以提煉一個CommonActivity
,把通用部分叫由它來處理,其他activity
只要繼承它即可
22.使用button+activitgroup
實現tab
效果時,使用Button.setSelected(true)
,確保按鈕處於選擇狀態,並使activitygroup
的當前activity
與該button
對應
23.如果所開發的為通用元件,為避免衝突,將drawable
/layout
/menu/values
目錄下的檔名增加字首
24.資料一定要效驗,例如字元型轉數字型,如果轉換失敗一定要有預設值;服務端響應資料是否有效判斷;
25.同一個客戶端如果要放在不同的市場,而且要統計各個市場下載及使用資料時針對不同的客戶端打不同的包,唯一的區別是versionName
,apk檔名為versionName.apk
。在升級時,要將自己的versionCode
和versionName
一併傳給服務端,如果需要升級,則下載versionName
相對應的apk
關於是否要強制升級:
1).不管何種情況都強制升級
2).判斷使用者的版本和當前最新版本,如果相容則強制升級,否則可選;
26.有的按鈕要避免重複點選
下面是網上的資料,很有必要看一看哦!真的很有用!識別符號命名法識別符號命名法最要有四種:
1 駝峰(Camel)命名法:又稱小駝峰命名法,除首單詞外,其餘所有單詞的第一個字母大寫。
2 帕斯卡(pascal)命名法:又稱大駝峰命名法,所有單詞的第一個字母大寫
3 下劃線命名法:單詞與單詞間用下劃線做間隔。
4 匈牙利命名法:廣泛應用於微軟程式設計環境中,在以Pascal命名法的變數前附加小寫序列說明該變數的型別。量的取名方式為:<scope_> + <prefix_> + <qualifier>範圍字首,型別字首,限定詞。個人覺得識別符號命名原則:儘可能的用最少的字元而又能完整的表達識別符號的含義。英文縮寫原則:
1 較短的單詞可通過去掉“母音”形成縮寫
2 較長的單詞可取單詞的頭幾個字母形成縮寫
3 此外還有一些約定成俗的英文單詞縮寫.下面為常見的英文單詞縮寫:
名稱 | 縮寫 |
icon | ic (主要用在app的圖示) |
color | cl(主要用於顏色值) |
divider | di(主要用於分隔線,不僅包括Listview中的divider,還包括普通佈局中的線) |
selector | sl(主要用於某一view多種狀態,不僅包括Listview中的selector,還包括按鈕的selector) |
average | avg |
background | Bg(主要用於佈局和子佈局的背景) |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
infomation | info |
initial | init |
image | img |
Internationalization | I18N |
length | len |
library | lib |
message | msg |
password- | pwd |
position | pos |
server | srv |
string | str |
temp | tmp |
window | wnd(win) |
程式中使用單詞縮寫原則:不要用縮寫,除非該縮寫是約定俗成的。
命名規範:
1 包(packages): 採用反域名命名規則,全部使用小寫字母。一級包名為com,二級包名為xx(可以是公司或則個人的隨便),三級包名根據應用進行命名,四級包名為模組名或層級名
包名 | 此包中包含 |
com.xx.應用名稱縮寫.activities | 頁面用到的Activity類(activities層級名使用者介面層) |
com.xx.應用名稱縮寫.base | 頁面中每個Activity類共享的可以寫成一個i額BaseActivity類 (基礎共享的類) |
com.xx.應用名稱縮寫.adapter | 頁面用到的Adapter類 (適配器的類) |
com.xx.應用名稱縮寫.tools | 此包中包含:公共工具方法類(tools模組名) |
com.xx.應用名稱縮寫.bean (或則 com.xx.應用名稱縮寫.unity ) | 此包中包含:元素類 |
com.xx.應用名稱縮寫.db | 資料庫操作類 |
com.xx.應用名稱縮寫.view (或則 com.xx.應用名稱縮寫.ui ) | 自定義的View類等 |
com.xx.應用名稱縮寫.service | Service服務 |
com.xx.應用名稱縮寫.broadcast | Broadcast服務 |
2 類(classes):名詞,採用大駝峰命名法,儘量避免縮寫,除非該縮寫是眾所周知的,比如HTML,URL,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。
類 | 描述 | 例如 |
activity類 | Aty或者Activity為字尾標識 | 歡迎頁面類WelcomeAty.或者WelcomeActivity |
Adapter類 | Adp或者Adapte 為字尾標識 | 新聞詳情介面卡NewtDetailAdp或則直接 NewDetailAdapter |
解析類 | Hlr為字尾標識 | 首頁解析類HomePosterHlr |
公共方法類 | Tools或Manager為字尾標識 | 執行緒池管理類:ThreadPoolManager日誌工具類:LogTools |
資料庫類 | 以DBHelper字尾標識 | 新聞資料庫:NewDBHelper |
Service類 | 以Service為字尾標識 | 時間服務TimeService |
BroadcastReceive類 | 以Broadcast為字尾標識 | 時間通知TimeBroadcast |
ContentProvider | 以Provider為字尾標識 | |
直接寫的共享基礎類 | 以Base開頭 | BaseActivity,BaseFragment |
3 介面(interface):命名規則與類一樣採用大駝峰命名法,多以able或ible結尾,如interface Runnable;interface Accessible。
4 方法(methods):動詞或動名詞,採用小駝峰命名法例如:onCreate(),run()
方法 | 說明 |
initXX() | 初始化相關方法,使用init為字首標識,如初始化佈局initView() |
isXX() | checkXX()方法返回值為boolean型的請使用is或check為字首標識 |
getXX() | 返回某個值的方法,使用get為字首標識 |
processXX() | 對資料進行處理的方法,儘量使用process為字首標識 |
displayXX() | 彈出提示框和提示資訊,使用display為字首標識 |
saveXX() | 與儲存資料相關的,使用sav為e字首標識 |
resetXX() | 對資料重組的,使用reset字首標識 |
clearXX() | 清除資料相關的 |
removeXXX() | 清除資料相關的 |
drawXXX() | 繪製資料或效果相關的,使用draw字首標識 |
5 變數(variables)採用小駝峰命名法。類中控制元件名稱必須與xml佈局id保持一致。用統一的量詞通過在結尾處放置一個量詞,就可建立更加統一的變數,它們更容易理解,也更容易搜尋。例如,請使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。量詞列表:量詞字尾說明
First 一組變數中的第一個
Last 一組變數中的最後一個
Next 一組變數中的下一個變數
Prev 一組變數中的上一個
Cur 一組變數中的當前變數
6 常量(Constants)全部大寫,採用下劃線命名法.例如:MIN_WIDTH
7 資原始檔(圖片drawable資料夾下):全部小寫,採用下劃線命名法,加字首區分
命名模式:activity名稱_邏輯名稱/common_邏輯名稱
如果有多種形態如按鈕等除外如btn_xx.xml(selector)
名稱 | 功能 |
btn_xx | 按鈕圖片使用btn_整體效果(selector) |
btn_xx_normal | 按鈕圖片使用btn_正常情況效果 |
btn_xx_press | 按鈕圖片使用btn_點選時候效果 |
bg_head | 背景圖片使用bg_功能_說明 |
def_search_cell | 預設圖片使用def_功能_說明 |
icon_more_help | 圖示圖片使用icon_功能_說明 |
seg_list_line | 具有分隔特徵的圖片使用seg_功能_說明 |
sel_ok | 選擇圖示使用sel_功能_說明 |
命名字尾:
字尾 | 說明 |
unit | 在使用xml的tilemode來配圖片時,element圖片使用此後綴 |
nor | 圖片的狀態,代表普通狀態 |
hl | 圖片的狀態,代表高亮狀態 |
press | 圖片的狀態,代表按下狀態 |
select | 圖片的狀態,代表其所佔的view被選中 |
unselect | 圖片的狀態,代表其所佔的view沒有被選中 |
8 資源佈局檔案(XML檔案(layout佈局檔案)):
全部小寫,採用下劃線命名法
1).contentview命名, Activity預設佈局,以去掉字尾的Activity類進行命名。不加字尾:
功能模組.xml
例如:main.xml、more.xml、settings.xml
或則:activity_功能模組.xml例如:activity_main.xml、activity_more.xml
2).Dialog命名:dialog_描述.xml
例如:dlg_hint.xml
2).PopupWindow命名:ppw_描述.xml
例如:ppw _info.xml
3). 列表項命名listitem_描述.xml
例如:listitem_city.xml
4).包含項:include_模組.xml
例如:include_head.xml、include_bottom.xml
5).adapter的子佈局:功能模組_item.xml
例如:main_item.xml、
9動畫檔案(anim資料夾下):全部小寫,採用下劃線命名法,加字首區分。
//前面為動畫的型別,後面為方向
動畫命名例子 | 規範寫法 | 備註 |
fade_in | 淡入 | |
fade_out | 淡出 | |
push_down_in | 從下方推入 | |
push_down_out | 從下方推出 | |
push_left | 推像左方 | |
slide_in_from_top | 從頭部滑動進入 | |
zoom_enter | 變形進入 | |
slide_in | 滑動進入 | |
shrink_to_middle | 中間縮小 |
10