來源
1.命名基本原則
在面向?qū)ο缶幊讨性刖叮瑢τ陬惙湛瑢ο螅椒ǖ肃冢兞康确矫娴拿欠浅S屑记傻纳嗣1热缟帽剩笮懙膮^(qū)分,使用不同字母開頭等等屯援。但究其本猛们,追其源,在為一個資源其名稱的時候狞洋,應(yīng)該本著描述性以及唯一性這兩大特征來命名弯淘,才能保證資源之間不沖突,并且每一個都便于記憶吉懊。
對于理解應(yīng)用程序的邏輯流庐橙,命名方案是最有影響力的一種幫助假勿。名稱應(yīng)該說明“什么”而不是“如何”。命名原則是:使名稱足夠長以便有一定的意義态鳖,并且足夠短以避免冗長转培。唯一名稱在編程上僅用于將各項(xiàng)區(qū)分開。以下幾點(diǎn)是規(guī)范的命名方法浆竭。
2.命名基本規(guī)范
2.1.編程基本命名規(guī)范
(1)避免難懂的名稱浸须,如屬性名xxK8,這樣的名稱會導(dǎo)致多義性兆蕉。
(2) 在面向?qū)ο蟮恼Z言中羽戒,在類屬性的名稱中包含類名是多余的,如Book.BookTitle虎韵,而是應(yīng)該使用Book.Title。
(3)在允許函數(shù)重載的語言中缸废,所有重載都應(yīng)該執(zhí)行相似的函數(shù)包蓝。
(4)使用動詞-名詞的方法來命名對給定對象執(zhí)行特定操作的例程,如CalculateInvoiceTotal()企量。(例程是某個系統(tǒng)對外提供的功能接口或服務(wù)的集合)
(5)只要合適测萎,在變量名的末尾或開頭加計(jì)算限定符(Avg、Sum届巩、Min硅瞧、Max、Index)恕汇。
(6)在變量名中使用互補(bǔ)對腕唧,如min/max、begin/end和open/close瘾英。
(7)布爾變量名應(yīng)該包含Is枣接,這意味著Yes/No 或 True/False 值,如 fileIsFound缺谴。
(8)即使對于可能僅出現(xiàn)在幾個代碼行中的生存期很短的變量但惶,仍然使用有意義的名 稱。僅對于短循環(huán)索引使用單字母變量名湿蛔,如 i 或 j膀曾。
(9)為了幫助區(qū)分變量和例程,對例程名稱使用Pascal大小寫處理 (CalculateInvoiceTotal)阳啥,其中每個單詞的第 一個字母都是大寫的添谊。對于變量名,使用 camel大小寫處理 (documentFormatType)苫纤,其中除了第一個單詞外每個單詞的第一個字母都是大寫的碉钠。
(10)不要使用原義數(shù)字或原義字符串纲缓,而是使用命名常數(shù),NUM_DAYS_IN_WEEK 喊废,以便于維護(hù)和理解祝高。
2.2.分類命名規(guī)范
(1)包的命名
Java包的名字都是由小寫單詞組成。但是由于Java面向?qū)ο缶幊痰奶匦晕劭辏恳幻鸍ava程序員都可以編寫屬于自己的Java包工闺,為了保障每個Java包命名的唯一性,在最新的Java編程規(guī)范中瓣蛀,要求程序員在自己定義的包的名稱之前加上唯一的前綴陆蟆。由于互聯(lián)網(wǎng)上的域名稱是不會重復(fù)的,所以程序員一般采用自己在互聯(lián)網(wǎng)上的域名稱作為自己程序包的唯一前綴惋增。
例如: net.frontfree.javagroup
(2)類的命名
類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫叠殷;如果類名稱由多個單詞組成,則每個單詞的首字母均應(yīng)為大寫例如TestPage诈皿;如果類名稱中包含單詞縮寫林束,則這個所寫詞的每個字母均應(yīng)大寫,如:XMLExample,還有一點(diǎn)命名技巧就是由于類是設(shè)計(jì)用來代表對象的稽亏,所以在命名類時應(yīng)盡量選擇名詞壶冒。
例如: Circle
(3)方法的命名
方法的名字的第一個單詞應(yīng)以小寫字母作為開頭,后面的單詞則用大寫字母開頭截歉。
例如: sendMessge
(4).常量的命名
常量的名字應(yīng)該都使用大寫字母胖腾,并且指出該常量完整含義。如果一個常量名稱由多個單詞組成瘪松,則應(yīng)該用下劃線來分割這些單詞咸作。
例如: MAX_VALUE
(5)參數(shù)的命名
參數(shù)的命名規(guī)范和方法的命名規(guī)范相同,而且為了避免閱讀程序時造成迷惑凉逛,請?jiān)诒M量保證參數(shù)名稱為一個單詞的情況下使參數(shù)的命名盡可能明確性宏。
(6)Javadoc注釋
Java除了可以采用我們常見的注釋方式之外,Java語言規(guī)范還定義了一種特殊的注釋状飞,也就是我們所說的Javadoc注釋毫胜,它是用來記錄我們代碼中的API的。Javadoc注釋是一種多行注釋诬辈,以/開頭酵使,而以/結(jié)束,注釋可以包含一些HTML標(biāo)記符和專門的關(guān)鍵詞焙糟。使用Javadoc注釋的好處是編寫的注釋可以被自動轉(zhuǎn)為在線文檔口渔,省去了單獨(dú)編寫程序文檔的麻煩。
例如:
/*
- This is an example of
- Javadoc
- @author darchon
- @version 0.1, 10/11/2002
*/
在每個程序的最開始部分穿撮,一般都用Javadoc注釋對程序的總體描述以及版權(quán)信息缺脉,之后在主程序中可以為每個類痪欲、接口、方法攻礼、字段添加Javadoc注釋业踢,每個注釋的開頭部分先用一句話概括該類、接口礁扮、方法知举、字段所完成的功能,這句話應(yīng)單獨(dú)占據(jù)一行以突出其概括作用太伊,在這句話后面可以跟隨更加詳細(xì)的描述段落雇锡。在描述性段落之后還可以跟隨一些以Javadoc注釋標(biāo)簽開頭的特殊段落,例如上面例子中的@auther和@version僚焦,這些段落將在生成文檔中以特定方式顯示锰提。
雖然為一個設(shè)計(jì)低劣的程序添加注釋不會使其變成好的程序,但是如果按照編程規(guī)范編寫程序并且為程序添加良好的注釋卻可以幫助你編寫出設(shè)計(jì)完美芳悲,運(yùn)行效率高且易于理解的程序欲账,尤其是在多人合作完成同一項(xiàng)目時編程規(guī)范就變得更加重要。俗話說“磨刀不誤砍柴工”芭概,花費(fèi)一點(diǎn)時間去適應(yīng)一下Java編程規(guī)范是有好處的。
3.分類命名規(guī)范
3.1.基本數(shù)據(jù)類型命名規(guī)范
Integer:int+描述 Char:chr+描述 Boolean:bln+描述
Long:lng+描述 Short:shr +描述 Double:dbl+描述
String:str+描述 Float:flt+描述 Single:sng+描述
DataTime:dt+描述 Array:arr+描述 Object:obj+描述
如:String srtName;
3.2.控件命名規(guī)范
TextView :txt_+描述 Button :btn_+描述
ImageButton :imgBtn_+描述 ImageView :imgView_+描述
CheckBox :chk_+描述 RadioButton :rdoBtn_+描述
AnalogClock :anaClk_+描述 DigitalClock :DgtClk_+描述
DatePicker :dtPk_+描述 TimePicker :tmPk +描述
ToggleButton :tglBtn+描述 EditText:edtTxt_+描述
ProgressBar:lcb_+描述 SeekBar:skBar +描述
AutoCompleteTextView:autoTxt+描述 MultiAutoCompleteTextView:mlAutoTxt_+描述
ZoomControls:zmCtrl_+描述 Include:ind_+描述
VideoView:vdoVi_+描述 WebView:webVi_+描述
RatingBar:ratBar_+描述 Tab:tab__+描述
Spinner:spn_+描述 Chronometer:Cmt_+描述
ScrollView:sclVi_+描述 TextSwitcher:txtSwt_+描述
Gallery:gal_+描述 ImageSwitcher:imgSwt_+描述
GridView:gV_+描述 ListView:lVi_+描述
ExpandableList: epdLt_+描述 MapView: mapVi_+描述
控件說明如下:
? TextView - 文本顯示控件
? Button - 按鈕控件
? ImageButton - 圖片按鈕控件
? ImageView - 圖片顯示控件
? CheckBox - 復(fù)選框控件
? RadioButton - 單選框控件
? AnalogClock - 鐘表(帶表盤的那種)控件
? DigitalClock - 電子表控件
? DatePicker - 日期選擇控件
? TimePicker - 時間選擇控件
? ToggleButton - 雙狀態(tài)按鈕控件
? EditText - 可編輯文本控件
? ProgressBar - 進(jìn)度條控件
? SeekBar - 可拖動的進(jìn)度條控件
? AutoCompleteTextView - 支持自動完成功能的可編輯文本控件
? MultiAutoCompleteTextView - 支持自動完成功能的可編輯文本控件惩嘉,允許輸入多值(多值之間會自動地用指定的分隔符 分開)
? ZoomControls - 放大/縮小按鈕控件
? Include - 整合控件
? VideoView - 視頻播放控件
? WebView - 瀏覽器控件
? RatingBar - 評分控件
? Tab - 選項(xiàng)卡控件
? Spinner - 下拉框控件
? Chronometer - 計(jì)時器控件
? ScrollView - 滾動條控件
? TextSwitcher - 文字轉(zhuǎn)換器控件(改變文字時增加一些動畫效果)
? Gallery –畫廊控件
? ImageSwitcher - 圖片轉(zhuǎn)換器控件(改變圖片時增加一些動畫效果)
? GridView - 網(wǎng)格控件
? ListView - 列表控件
? ExpandableList - 支持展開/收縮功能的列表控件
3.3.變量命名規(guī)范
變量命名:前綴+類型描述+意義描述
前綴:
成員變量:m_*** 局部變量:l_*** 形參:a_***
常量:大寫*** 枚舉值:em***
3.4.程序規(guī)范
工程的命名為:描述
應(yīng)用程序名的命名為:描述+App
4.代碼書寫規(guī)范
(1)建立標(biāo)準(zhǔn)的縮進(jìn)大邪罩蕖(如四個空格),并一致地使用此標(biāo)準(zhǔn)文黎。用規(guī)定的縮進(jìn)對齊代碼節(jié)惹苗。
(2)在發(fā)布源代碼的硬拷貝版本時使用特定的字體以及字號(新宋體、小五號)耸峭。
(3)在括號對對齊的位置垂直對齊左括號和右括號桩蓉,如:
for (i=0; i<100; i++)
{
;
}
(4)沿邏輯結(jié)構(gòu)行縮進(jìn)代碼使代碼更易于閱讀和理解,如:
if(expression)
{
if(expression )
{
//
//此處填寫你的代碼塊;
//
}
else
{
//
//此處填寫你的代碼塊;
//
}
}
(5)為注釋和代碼建立最大的行長度劳闹,以避免不得不滾動源代碼編輯器院究,并且可以提供整齊的硬拷貝表示形式。
(6)當(dāng)一行內(nèi)容太長而必須換行時本涕,在后面換行代碼中要使用縮進(jìn)格式业汰,如下:
string inserString ="Insert Into TableName(username,password,email,sex,address) "
+"Values( 'Soholife ', 'chenyp ', 'soholife@sina.com ', 'male ', '深圳福田 ') ";
(7)每一行上放置的語句避免超過一條。特殊循環(huán)如for(i =0;i<100;i++)等除外菩颖。
(8)編寫SQL語句時样漆,對于關(guān)鍵字使用全部大寫,對于數(shù)據(jù)庫元素(如表晦闰、列和視圖)使用大小寫混合放祟。例如SELECT * FROM Table1鳍怨;
(9)將每個主要的SQL子句放在不同的行上,這樣更容易閱讀和編輯語句跪妥,例如:
SELECT FirstName, LastName
FROM Customers
WHERE State = 'WA '
(10)在物理文件之間在邏輯上劃分源代碼鞋喇。
(11)使用空白為源代碼提供結(jié)構(gòu)線索。這樣做會創(chuàng)建代碼“段”骗奖,有助于讀者理解軟件的邏輯分段
(12)將大的復(fù)雜代碼段分為較小的确徙、易于理解的模塊。
5.注釋
軟件文檔以兩種形式存在:外部的和內(nèi)部的执桌。外部文檔(如規(guī)范鄙皇、幫助文件和設(shè)計(jì)文檔)在源代碼的外部維護(hù)。內(nèi)部文檔由開發(fā)人員在開發(fā)時在源代碼中編寫的注釋組成仰挣。
不考慮外部文檔的可用性伴逸,由于硬拷貝文檔可能會放錯地方,源代碼清單應(yīng)該能夠獨(dú)立存在膘壶。外部文檔應(yīng)該由規(guī)范错蝴、設(shè)計(jì)文檔、更改請求颓芭、錯誤歷史記錄和使用的編碼標(biāo)準(zhǔn)組成顷锰。 以下幾點(diǎn)是規(guī)范的注釋方法:
(1)一個工程應(yīng)有一個統(tǒng)一的頭文件注釋,以說明整個工程的信息亡问、創(chuàng)建日期官紫、版本等等
(2)對重要的程序加注釋進(jìn)行說明
(3)修改代碼或刪除時,將原代碼用注釋的方法屏蔽州藕,同時要加開發(fā)者自身對修改操作的注釋束世。格式為:
//原代碼
//Added/(Modified/ Deleted) by 開發(fā)者姓名 年-月-日;
//因?yàn)闃I(yè)務(wù)原因修改的,要注明修改或刪除原因)
新代碼
(4)使用XML文檔格式床玻,如下面方法的注釋:
/// <summary>
/// 得到某人的年齡
/// </summary>
/// <param name= "userName "> 用戶名 </param>
/// <returns> 用戶年齡 </returns>
public int GetUserAge(string userName)
{
//
//此處寫你的程序代碼
//
}
(5)避免雜亂的注釋毁涉,而是應(yīng)該使用空白將注釋同代碼分開。
(6)移除所有臨時或無關(guān)的注釋锈死,以避免在日后的維護(hù)工作中產(chǎn)生混亂贫堰。
(7)注釋應(yīng)對代碼進(jìn)行準(zhǔn)確的說明,不應(yīng)存在歧義馅精。
(8)在整個應(yīng)用程序中严嗜,使用具有一致的標(biāo)點(diǎn)和結(jié)構(gòu)的統(tǒng)一樣式來構(gòu)造注釋。