融于團(tuán)隊(duì)開發(fā)你必須知道的B/S語言下常見命名規(guī)范
另外古人相信只要知道一個(gè)人真正的名字就會獲得凌駕于那個(gè)人之上的不可思議的力量。只要給事物想到正確的名字,它就可以帶來比代碼更強(qiáng)的力量。如果所有的命名都與其自然相適合,則關(guān)系清晰,含義可以推導(dǎo)得出,一般人的推想也能在意料之中。
本文我們將圍繞著“命名規(guī)則”這個(gè)主題展開討論。收集各種B/S語言下常見命名規(guī)范,希望對各位開發(fā)能有所幫助。
Java中的命名規(guī)則
在面向?qū)ο缶幊讨?,對于類,對象,方法,變量等方面的命名是非常有技巧的。比如,大小寫的區(qū)分,使用不同字母開頭等等。但究其本,追其源,在為一個(gè)資源其名稱的時(shí)候,應(yīng)該本著描述性以及唯一性這兩大特征來命名,才能保證資源之間不沖突,并且每一個(gè)都便于記憶。
包的命名
Java包的名字都是由小寫單詞組成。但是由于Java面向?qū)ο缶幊痰奶匦裕恳幻鸍ava程序員都可以編寫屬于自己的Java包,為了保障每個(gè)Java包命名的唯一性,在***的Java編程規(guī)范中,要求程序員在自己定義的包的名稱之前加上唯一的前綴。由于互聯(lián)網(wǎng)上的域名稱是不會重復(fù)的,所以程序員一般采用自己在互聯(lián)網(wǎng)上的域名稱作為自己程序包的唯一前綴。
例如: net.frontfree.javagroup
類的命名
類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫;如果類名稱由多個(gè)單詞組成,則每個(gè)單詞的首字母均應(yīng)為大寫例如TestPage;如果類名稱中包含單詞縮寫,則這個(gè)所寫詞的每個(gè)字母均應(yīng)大寫,如:XMLExample,還有一點(diǎn)命名技巧就是由于類是設(shè)計(jì)用來代表對象的,所以在命名類時(shí)應(yīng)盡量選擇名詞。
例如: Circle
方法的命名
方法的名字的***個(gè)單詞應(yīng)以小寫字母作為開頭,后面的單詞則用大寫字母開頭。
例如: sendMessge
常量的命名
常量的名字應(yīng)該都使用大寫字母,并且指出該常量完整含義。如果一個(gè)常量名稱由多個(gè)單詞組成,則應(yīng)該用下劃線來分割這些單詞。
例如: MAX_VALUE
參數(shù)的命名
參數(shù)的命名規(guī)范和方法的命名規(guī)范相同,而且為了避免閱讀程序時(shí)造成迷惑,請?jiān)诒M量保證參數(shù)名稱為一個(gè)單詞的情況下使參數(shù)的命名盡可能明確。
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
- */
在每個(gè)程序的最開始部分,一般都用Javadoc注釋對程序的總體描述以及版權(quán)信息,之后在主程序中可以為每個(gè)類、接口、方法、字段添加Javadoc注釋,每個(gè)注釋的開頭部分先用一句話概括該類、接口、方法、字段所完成的功能,這句話應(yīng)單獨(dú)占據(jù)一行以突出其概括作用,在這句話后面可以跟隨更加詳細(xì)的描述段落。在描述性段落之后還可以跟隨一些以Javadoc注釋標(biāo)簽開頭的特殊段落,例如上面例子中的@auther和@version,這些段落將在生成文檔中以特定方式顯示。
雖然為一個(gè)設(shè)計(jì)低劣的程序添加注釋不會使其變成好的程序,但是如果按照編程規(guī)范編寫程序并且為程序添加良好的注釋卻可以幫助你編寫出設(shè)計(jì)***,運(yùn)行效率高且易于理解的程序,尤其是在多人合作完成同一項(xiàng)目時(shí)編程規(guī)范就變得更加重要。俗話說“磨刀不誤砍柴工”,花費(fèi)一點(diǎn)時(shí)間去適應(yīng)一下Java編程規(guī)范是有好處的。
#p#
.NET中的命名規(guī)則
名稱空間的命名
命名名稱空間的一般規(guī)則如下:
CompanyName.TechnologyName
這樣,我們看到的名稱空間應(yīng)該是這樣的:
Microsoft.Office
PowerSoft.PowerBuilder
注意:這只是一個(gè)原則。第三方公司可以選擇其它的名字。
避免用公司名稱或其它著名品牌的名稱作為名稱空間的前綴,這樣會造成兩個(gè)公布的名稱空間有同一個(gè)名稱的可能性。
例如: 將微軟提供的Office自動類命名為Microsoft.Office
使用Pascal大寫方式,用逗號分隔邏輯成分。
例如:Microsoft.Office.PowerPoint
如果你的品牌使用的是非傳統(tǒng)大寫方式,那么一定要遵循你的品牌所確定使用的大寫方式,即使這種方式背離了通常的名稱空間大寫規(guī)則。
例如:NeXT.WebObjects
ee.cummings
類和類成分的命名
類的命名原則是用名詞或名詞短語命名類,使用Pascal大寫。減少類名中縮寫的使用量。不要使用任何類前綴(比如C),不要使用帶下劃線的字符。
例如:public class FileStream {}
public class Button {}
public class String {}
變量的命名
名稱中各單詞首字母均為大寫。
例如:FindLastRecord
RedrawMyForm
在內(nèi)部范圍中避免使用與外部范圍中的名稱相同的名稱。若訪問錯(cuò)誤變量,則會產(chǎn)生錯(cuò)誤結(jié)果。若變量與同一名稱的關(guān)鍵字沖突,則必須在關(guān)鍵字前加適當(dāng)?shù)念愋蛶煲宰鳂?biāo)識。
例如:若有一個(gè)名為 date 的變量,只能通過調(diào)用 System.Date 來使用內(nèi)部 Date 函數(shù)。
函數(shù)和方法的命名
函數(shù)和方法的命名應(yīng)該以動詞開始,使用Pascal大寫。不要使用帶下劃線的字符。
例如:InitNameArray
CloseDialog
接口命名原則
使用名詞或名詞短語,或者描述行為的形容詞來命名接口,使用Pascal大寫。 減少接口名中縮寫的使用量,在接口名前加前綴I,以表示這個(gè)類型是一個(gè)接口。
例如: IComponent(描述性名詞)
ICustomAttributeProvider(名詞短語)
IPersistable(形容詞)
參數(shù)的命名
使用描述性參數(shù)名。參數(shù)名應(yīng)該具有足夠的描述性,這樣在大多數(shù)情況下參數(shù)名和它的種類可以用來確定它的意思。根據(jù)參數(shù)的意思來命名參數(shù),而不是根據(jù)參數(shù)的種類來命名。我們希望開發(fā)工具可以用很方便的方式提供關(guān)于參數(shù)種類的信息,這樣參數(shù)名可以得到更好的使用,可以對語義而不是對種類進(jìn)行描述。但是偶爾使用根據(jù)類型命名的參數(shù)名也是完全可以的。不要使用保留參數(shù)。如果在下一個(gè)版本中需要更多的數(shù)據(jù),可以增加進(jìn)來。
例如:Type GetType (string typeName)
string Format (string format, object [ ] args)
屬性的命名
用名詞或名詞短語命名屬性,屬性與類型要一樣。 用與一個(gè)類型的名稱相同的名字來命名屬性時(shí),就使這個(gè)屬性的類型成為那個(gè)類型。雖然聽起來有些奇怪,但這是正確的。
例如:
- public enum Color {...}
- public class Control {
- public Color Color {get {...} set {...}}
- }
事件的命名
用EventHandloer后綴命名事件處理程序,使用名為sender和e的兩個(gè)參數(shù),Sender參數(shù)代表提出事件的對象。Sender參數(shù)永遠(yuǎn)是一個(gè)類型對象,即使它可能使用了更為特定的類型,與事件相關(guān)的狀態(tài)被封裝在一個(gè)名為e的事件類范例中。要使用這個(gè)類型的正確的、特定的事件類。
例如:
- public delegate void MouseEventHandler(object sender, MouseEvent e);
命名事件名時(shí),需要有之前和之后的時(shí)態(tài)概念,因此要使用現(xiàn)在時(shí)態(tài)和過去時(shí)態(tài)(不要使用BeforeXxx\\AfterXxx的方式)。例如,可以被取消的結(jié)束事件就有Closing事件和Closed事件。
長項(xiàng)和常用項(xiàng)的命名
可使用縮寫使名稱長度適中,通常,多于 32 個(gè)字符的變量名在低分辨率的監(jiān)視器上難以閱讀。同時(shí),請確保縮寫在整個(gè)應(yīng)用程序中保持一致。
例如:可以使用“HTML”代替“HyperText Markup Language”。
代碼書寫格式規(guī)范
◆ 文件之中不得存在無規(guī)則的空行,比如說連續(xù)十個(gè)空行。一般來講函數(shù)與函數(shù)之間的空行為2-3行。
◆ 在函數(shù)體內(nèi)部,在邏輯上獨(dú)立的兩個(gè)函數(shù)塊可適當(dāng)空行,一般為1-2行。
◆ 每行長度盡量避免超過屏幕寬度,應(yīng)不超過80個(gè)字符。
◆ 盡量用公共過程或子程序去代替重復(fù)的功能代碼段。
◆ 使用括號清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的運(yùn)算順序。如將 x=a*b/c*d 寫成 x=(a*b/c)*d可避免閱讀者誤解為x=(a*b)/(c*d)。
◆ 避免采用過于復(fù)雜的條件測試。
◆ 避免過多的循環(huán)嵌套和條件嵌套。
◆ 一個(gè)函數(shù)不要超過200行。一個(gè)文件應(yīng)避免超過2000行。
◆ 避免使用goto語句。
◆ 避免采用多賦值語句,如x = y = z;。
代碼注釋規(guī)范
.cs文件的注釋
所有.cs文件開頭都要加上注釋,寫明文件創(chuàng)建時(shí)間、作者、用途概述等
例如:
- //********************************************************
- //新增日期:2004.7.19
- //作者:XXX
- //內(nèi)容說明: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- //********************************************************
函數(shù)過程注釋
所有的函數(shù)體開頭都要加上注釋,所以注釋使用.NET注釋規(guī)范。
例如:
- /// <summary>
- /// 構(gòu)造函數(shù)
- /// </summary>
- /// <param name='is_xxx1'>示例參數(shù)1</param>
- /// <param name='is_xxx2'>示例參數(shù)2</param>
- public UpgradeThread(string is_xxx1, string is_xxx2)
- {
- //…
- }
常量變量注釋
所有的常量變量,無論是全局還是局部使用的,凡是對代碼整體起到關(guān)鍵性做用的都需要加上注釋。
例如:
- /// <summary>
- /// 當(dāng)前線程指向的備份文件本地保存路徑
- /// </summary>
- public string StorePath = '';
代碼修改注釋
當(dāng)開發(fā)者維護(hù)以前的程序代碼時(shí),需要在修改處的開始及結(jié)尾,加上自己的注釋信息。
例如:
- /BEGIN 2004-7-19 Jayson 修正了XXX問題
- 略…
- //END 2004-7-19 Jayson
#p#
PHP中的命名規(guī)則
類的命名
在為類(class )命名前首先要知道它是什么。如果通過類名的提供的線索,還是想不起這個(gè)類是什么的話,那么就說明設(shè)計(jì)存在問題。
超過三個(gè)詞組成的混合名是容易造成系統(tǒng)各個(gè)實(shí)體間的混淆,嘗試使用(CRC Se- ssion card)看看該命名所對應(yīng)的實(shí)體是否有著那么多的功用。
◆ 對于派生類的命名應(yīng)該避免帶其父類名的誘惑,一個(gè)類的名字只與它自身有關(guān),和它的父類叫什么無關(guān)。
◆ 使用大寫字母作為詞的分隔,其他的字母均使用小寫,名字的首字母使用大寫 。不要使用下劃線('_') 。
例如: class NameOneTwo
class Name
類庫的命名
目前命名空間正在越來越廣泛的被采用,以避免不同廠商和團(tuán)體類庫間的類名沖突。當(dāng)尚未采用命名空間的時(shí)候,為了避免類名沖突,一般的做法是在類名前加上獨(dú)特的前綴,兩個(gè)字符就可以了,當(dāng)然多用一些會更好。
例如: John Johnson的數(shù)據(jù)結(jié)構(gòu)類庫可以用Jj做為前綴,如下:
- class JjLinkList
- {
- }
方法的命名
采用與類命名一致的規(guī)則,同樣是使用英文單詞詮釋出方法的作用。
例如:
- class NameOneTwo
- {
- function DoIt() {};
- function HandleError() {};
- }
類屬性的命名
屬性命名應(yīng)該以字符‘m’為前綴。前綴‘m’后采用于類命名一致的規(guī)則。‘m’總是在名字的開頭起修飾作用,就像以‘r’開頭表示引用一樣。
前綴'm'防止類屬性和方法名發(fā)生任何沖突。你的方法名和屬性名經(jīng)常會很類似,特別是存取元素。
例如:
- class NameOneTwo
- {
- function VarAbc() {};
- function ErrorNumber() {};
- var mVarAbc;
- var mErrorNumber;
- var mrName;
- }
方法中參數(shù)的命名
***個(gè)字符使用小寫字母。在首字符后的所有字都按照類命名規(guī)則首字符大寫。
這樣做可以隨時(shí)知道哪個(gè)變量對應(yīng)哪個(gè)變量。另外,這樣做可以使用與類名相似的名稱而不至于產(chǎn)生重名沖突。
例如:
- class NameOneTwo
- {
- function StartYourEngines(
- &$rSomeEngine,
- &$rAnotherEngine);
- }
變量的命名
所有字母都使用小寫。使用'_'作為每個(gè)詞的分界
通過這一途徑,代碼中變量的作用域是清晰的。所有的變量在代碼中都看起來不同,容易辨認(rèn)。
例如:
- function HandleError($errorNumber)
- {
- $error = OsErr();
- $time_of_error = OsErr->getTimeOfError;
- $error_processor = OsErr->getErrorProcessor;
- }
全局變量的命名
全局變量應(yīng)該帶前綴‘g’。
知道一個(gè)變量的作用域是非常重要的。
例如:global $gLog;
global &$grLog;
函數(shù)的命名
函數(shù)名字采用C GNU的慣例,所有的字母使用小寫字母,使用'_'分割單詞。
這樣可以更易于區(qū)分相關(guān)聯(lián)的類名。
例如:
- function some_bloody_function()
- {
- }
#p#
NoahWeb中的命名規(guī)則
NoahWeb汲取了各種編程語言的精華,經(jīng)過反復(fù)的總結(jié),最終形成了一套獨(dú)特且高效的命名規(guī)則。在命名的過程中,使用“資源名稱+功能描述”的方式,保證了資源之間的唯一性,并且大大提高了資源的描述性和閱讀性。
頁面或動作傳值命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
傳遞id使用 | pointid | abc.aspx?pointid=123 |
傳遞name使用 | pointname | abc.aspx?pointname=xxx |
搜索關(guān)鍵詞 | keyword | abc.aspx?keyword=xxx |
當(dāng)前頁索引 | page | abc.aspx?page=1 |
字符資源命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
針對表的列表命名 | list_表名[_功能名] | list_user_view |
手寫數(shù)據(jù)庫操作集 | sql_[表名或功能名] | sql_user_search |
表單命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
表單id命名 | 表名+功能 | userLogin |
輸入?yún)^(qū)控件id命名 | form+對應(yīng)數(shù)據(jù)庫的列名 | formId;formname |
數(shù)據(jù)庫操作命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
user_S_ById | ||
user_S_ByName | ||
user_S_Pagelist | ||
查詢 | 表名_S_條件+功能說明 | user_S_ByNamePagelist |
user_S_ByNameSearch | ||
user_S_ByIdTopTen | ||
user_S_ByDateTopTen | ||
user_S_ByDateTopFive | ||
user_S_ByDateTopSet | ||
刪除 | 表名_D_條件+功能說明 | user_D_ById |
插入 | 表名_I_+功能說明 | user_I_NewData |
更新 | 表名_U_條件+功能說明 | user_U_ByIdChangePassword |
動作命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
動作命名 | 表名+所屬功能+操作方式
( |
user_manager_add user_manager_add_ex user_manager_list user_manager_search user_manager_viewInfo user_manager_update_ex user_manager_del |
文件上傳命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
表單文件上傳區(qū)命名規(guī)則 | myfile+編號 |
myfile1 myfile2 myfile3 |
cookie命名規(guī)則
應(yīng)用 | 規(guī)則 | 示范 |
變量名命名 | cookie+變量名 | cookieusername |
#p#
網(wǎng)站文件命名規(guī)則
關(guān)于文件的命名,看似無足重輕,但實(shí)際上如果沒有良好的命名規(guī)則進(jìn)行必要的約束,一味的亂起名稱,最終導(dǎo)致的結(jié)果就是整個(gè)網(wǎng)站或是文件夾無法管理。所以,命名規(guī)則在這里同樣非常重要。 需要特別注意的時(shí)候,網(wǎng)站文件或文件夾命名請盡量避免使用中文字符命名。
文件的命名
以最少的字母達(dá)到最容易理解的意義。
索引文件統(tǒng)一使用index.html文件名(小寫) index.html文件統(tǒng)一作為"橋頁",不制作具體內(nèi)容,僅僅作為跳轉(zhuǎn)頁和meta標(biāo)簽頁。主內(nèi)容頁為main.html。
按菜單名的英語翻譯取單一單詞為名稱。所有單英文單詞文件名都必須為小寫,所有組合英文單詞文件名第二個(gè)起***個(gè)字母大寫; 所有文件名字母間連線都為下劃線。
例如: 關(guān)于我們 \aboutus
信息反饋 \feedback
產(chǎn) 品 \product
圖片的命名
以圖片英語字母為名。以最少的字母達(dá)到最容易理解的意義。
對于較小的圖片,我們使用如下格式的命名 :
sm.kahn.gif
其中,sm 代表“small”,kahn 代表圖片的內(nèi)容。較大圖像的命名規(guī)則也一樣,不過是以 bg 開頭的:
bg.kahn.gif
用以區(qū)分不同圖像的命名規(guī)則應(yīng)當(dāng)是全站通用的,這樣可以盡量避免將不同的名稱攪混。
網(wǎng)站目錄的命名
目錄建立的原則是以最少的層次提供最清晰簡便的訪問結(jié)構(gòu)。
服務(wù)器的ftp上傳目錄默認(rèn)為html 根目錄文件 根目錄只允許存放index.html和main.html文件,以及其他必須的系統(tǒng)文件。
每個(gè)語言版本存放于獨(dú)立的目錄。已有版本語言設(shè)置為: 簡體中文 \gb 繁體中文 \big5 英 語 \en 日 語 \jp 每個(gè)主要功能(主菜單)建立一個(gè)相應(yīng)的獨(dú)立目錄。 根目錄下的images為存放公用圖片目錄,每個(gè)目錄下私有圖片存放于各自獨(dú)立images目錄.
例如: \menu1\images
\menu2\images
另外,所有的js文件存放在根目錄下統(tǒng)一目錄\script 所有的CSS文件存放在根目錄下的style目錄 所有的CGI程序存放在根目錄并列目錄\cgi_bin目錄。
對于一些信息更新量比較大的站點(diǎn)或是欄目,還可以采用一種更為特殊的方式來進(jìn)行文件架的命名,這樣能使得日后的維護(hù)更加方便,這樣的方式就是使用“單一單詞命名的目錄”+“年年年年_月月_日日”的方式命名,***的“日日”是根據(jù)更新量大小可選擇的,如果每日更新量很大則可以加上“日日”。
例如: \news\2005_08\
\news\2005_09\
\news\2005_10_12\
#p#
Dreamweaver文件的命名規(guī)則
在Dreamweaver中用戶可以對一系列不同類型的對象進(jìn)行命名,這些對象包括圖片、層、表單、文件、數(shù)據(jù)庫域等,這些對象將會被許多不同的工作引擎進(jìn)行分析處理,這些工具包括各種瀏覽器、JavaScript腳本解析器、網(wǎng)絡(luò)服務(wù)器、應(yīng)用程序服務(wù)器、查詢語言等等。
如果某個(gè)對象的名稱無法被某個(gè)解析器識別,就有可能會導(dǎo)致故障的發(fā)生,更加麻煩的是用戶可能很難發(fā)現(xiàn)問題的原因,例如某個(gè)具體的特效無法正確顯示,或者是在某個(gè)特殊階段無法正確顯示,有時(shí)故障可能只會在某種特殊情況或在使用某個(gè)瀏覽器時(shí)發(fā)生,而在其它情況下保持正常,用戶將很難分析出故障是由于命名問題而導(dǎo)致的。
由于需要命名的對象的種類很多,對這些對象進(jìn)行解析的引擎工具也很多,因此用戶在給這些對象命名時(shí)應(yīng)該遵循一個(gè)常規(guī)的標(biāo)準(zhǔn),以確保普遍兼容性。命名的基本原則就是:使用***的、小寫、不帶空格的名稱,名稱應(yīng)由字母和數(shù)字組成,并以字母開始,名稱中可以包含"_"符號。
***
請確保某對象的名稱與其它對象不同,保證其***的屬性。
例如: 你可以將某對象命名為"feedback_button_3"
小寫
有些服務(wù)器和腳本解析器對文件名的大小寫也進(jìn)行檢查,而為了避免因大小寫引起的不兼容問題,建議用戶在命名時(shí)全部使用小寫文件名。
不帶空格
不同的解析器對空格等符號的解析結(jié)果不同,例如某些解析器會把空格視為某個(gè)十六進(jìn)制的數(shù)值,因此建議用戶使用不帶空格的單詞做為文件對象的名稱。
詞數(shù)混合
用戶在命名中可以隨意使用26個(gè)羅馬字母以及10個(gè)阿拉伯?dāng)?shù)字,而不建議使用其它標(biāo)點(diǎn)符號。
以字母開始
有些解析器不喜歡以數(shù)字開頭的文件名。
例如: 在某些瀏覽器中的JavaScript腳本內(nèi)部,如果使用"alpha23"這樣的名稱就不會出現(xiàn)問題,而如果使用"23alpha"這樣的名稱就可能會發(fā)生故障。
可包含"_"符號
為了使某個(gè)對象的文件名***,用戶可以通過使用"_"符號來更加詳細(xì)地描述文件名。
例如: 某對象的文件名可以是"jd_background_17"。
除了上述原則標(biāo)準(zhǔn)之外,我們還需要注意一些其它情況,如文件名與系統(tǒng)的沖突。某些文件名可能滿足上述標(biāo)準(zhǔn),但可能還會導(dǎo)致故障的發(fā)生,原因是因?yàn)樗鼈兣c系統(tǒng)產(chǎn)生了沖突。
例如:當(dāng)在使用JavaScript腳本函數(shù)時(shí),不建議用戶將某個(gè)變量命名為"for",因?yàn)?quot;for"在本系統(tǒng)下是一個(gè)工作語言字串,使用其命名某個(gè)變量可能會導(dǎo)致解析器工作出錯(cuò)。許多程序都有一些保留名稱,這些名稱一般不建議用戶使用。
例如:用戶使用某個(gè)SQL程序保留的名稱來命名某個(gè)數(shù)據(jù)庫域,SQL對其進(jìn)行分析時(shí)就可能會報(bào)錯(cuò)。
此外,用戶在將不同來源的代碼編到一起時(shí),應(yīng)該注意文件名的沖突情況。
例如: 用戶把來自不同資源的兩個(gè)JavaScript行為代碼編至同一網(wǎng)頁內(nèi),而這兩個(gè)行為代碼的變量名相同,這時(shí)就有可能出現(xiàn)問題。
因此做為查詢故障的一個(gè)技巧,在出現(xiàn)故障時(shí),用戶可以查詢一下相同網(wǎng)頁中是否存在相同文件名的變量名稱。
#p#
VBScript中的命名規(guī)則
常數(shù)命名規(guī)則
VBScript 的早期版本不允許創(chuàng)建用戶自定義常數(shù)。如果要使用常數(shù),則常數(shù)以變量的方式實(shí)現(xiàn),且全部字母大寫以和其他變量區(qū)分。常數(shù)名中的多個(gè)單詞用下劃線 (_) 分隔。
例如: USER_LIST_MAX 、NEW_LINE
這種標(biāo)識常數(shù)的方法依舊可行,但您還可以選擇其他方案,用 Const 語句創(chuàng)建真正的常數(shù)。這個(gè)約定使用大小寫混合的格式,并以con”作為常數(shù)名的前綴。
例如: conYourOwnConstant
變量命名規(guī)則
出于易讀和一致性的目的,請?jiān)?VBScript 代碼中使用以下變量命名約定:
子類型 | 前綴 | 示例 |
Boolean | bln | blnFound |
Byte | byt | bytRasterData |
Date (Time) | dtm | dtmStart |
Double | dbl | dblTolerance |
Error | err | errOrderNum |
Integer | int | intQuantity |
Long | lng | lngDistance |
Object | obj | objCurrent |
Single | sng | sngAverage |
String | str | strFirstName |
變量作用域命名規(guī)則
變量應(yīng)定義在盡量小的作用域中。VBScript 變量的作用域如下所示:
變量作用域前綴命名規(guī)則
作用域 | 前綴 | 示例 |
過程級 | 無 | dblVelocity |
Script 級 | s | sblnCalcInProgress |
隨著腳本代碼長度的增加,有必要快速區(qū)分變量的作用域。在類型前綴前面添加一個(gè)單字符前綴可以實(shí)現(xiàn)這一點(diǎn),而不致使變量名過長。
描述性變量名和過程名的命名規(guī)則
變量名或過程名的主體應(yīng)使用大小寫混合格式,并且盡量完整地描述其目的。另外,過程名應(yīng)以動詞開始,例如 InitNameArray 或 CloseDialog。
對于經(jīng)常使用的或較長的名稱,推薦使用標(biāo)準(zhǔn)縮寫以使名稱保持在適當(dāng)?shù)拈L度內(nèi)。通常多于 32 個(gè)字符的變量名會變得難以閱讀。使用縮寫時(shí),應(yīng)確保在整個(gè)腳本中保持一致。例如,在一個(gè)腳本或腳本集中隨意切換 Cnt 和 Count 將造成混亂。
對象命名規(guī)則
下表列出了 VBScript 中可能用到的對象命名約定(推薦):
對象類型 | 前綴 | 示例 |
3D 面板 | pnl | pnlGroup |
動畫按鈕 | ani | aniMailBox |
復(fù)選框 | chk | chkReadOnly |
組合框、下拉列表框 | cbo | cboEnglish |
命令按鈕 | cmd | cmdExit |
公共對話框 | dlg | dlgFileOpen |
框架 | fra | fraLanguage |
水平滾動條 | hsb | hsbVolume |
圖像 | img | imgIcon |
標(biāo)簽 | lbl | lblHelpMessage |
直線 | lin | linVertical |
列表框 | lst | lstPolicyCodes |
旋鈕 | spn | spnPages |
文本框 | txt | txtLastName |
垂直滾動條 | vsb | vsbRate |
滑塊 | sld | sldScale |
代碼注釋規(guī)則
所有過程的開始部分都應(yīng)有描述其功能的簡要注釋。這些注釋并不描述細(xì)節(jié)信息(如何實(shí)現(xiàn)功能),這是因?yàn)榧?xì)節(jié)有時(shí)要頻繁更改。這樣就可以避免不必要的注釋維護(hù)工作以及錯(cuò)誤的注釋。細(xì)節(jié)信息由代碼本身及必要的內(nèi)部注釋來描述。
當(dāng)傳遞給過程的參數(shù)的用途不明顯,或過程對參數(shù)的取值范圍有要求時(shí),應(yīng)加以說明。如果過程改變了函數(shù)和變量的返回值(特別是通過參數(shù)引用來改變),也應(yīng)在過程的開始部分描述該返回值。
過程開始部分的注釋應(yīng)包含以下區(qū)段標(biāo)題。相關(guān)樣例,請參閱后面的“格式化代碼”部分。
區(qū)段標(biāo)題 | 注釋內(nèi)容 |
目的 | 過程的功能(不是實(shí)現(xiàn)功能的方法)。 |
假設(shè) | 其狀態(tài)影響此過程的外部變量、控件或其他元素的列表。 |
效果 | 過程對每個(gè)外部變量、控件或其他元素的影響效果的列表。 |
輸入 | 每個(gè)目的不明顯的參數(shù)的解釋。每個(gè)參數(shù)都應(yīng)占據(jù)單獨(dú)一行并有其內(nèi)部注釋。 |
返回 | 返回值的解釋。 |
請記住以下幾點(diǎn):
◆ 每個(gè)重要的變量聲明都應(yīng)有內(nèi)部注釋,描述變量的用途。
◆ 應(yīng)清楚地命名變量、控件和過程,僅在說明復(fù)雜細(xì)節(jié)時(shí)需要內(nèi)部注釋。
◆ 應(yīng)在腳本的開始部分包含描述該腳本的概述,列舉對象、過程、運(yùn)算法則、對話框和其他系統(tǒng)從屬物。有時(shí)一段描述運(yùn)算法則的假碼是很有用的。
格式化代碼
應(yīng)盡可能多地保留屏幕空間,但仍允許用代碼格式反映邏輯結(jié)構(gòu)和嵌套。以下為幾點(diǎn)提示:
◆ 標(biāo)準(zhǔn)嵌套塊應(yīng)縮進(jìn) 4 個(gè)空格。
◆ 過程的概述注釋應(yīng)縮進(jìn) 1 個(gè)空格。
◆ 概述注釋后的***層語句應(yīng)縮進(jìn) 4 個(gè)空格,每一層嵌套塊再縮進(jìn) 4 個(gè)空格。例如:
- '*********************************************************
- ' 目的: 返回指定用戶在 UserList 數(shù)組中***次出現(xiàn)的位置。
- ' 輸入: strUserList(): 所查找的用戶列表。
- ' strTargetUser: 要查找的用戶名。
- ' 返回: strTargetUser 在 strUserList 數(shù)組中***次出現(xiàn)時(shí)的索引。
- ' 如果目標(biāo)用戶未找到,返回 -1。
- '*********************************************************
- Function intFindUser (strUserList(), strTargetUser)
- Dim i ' 循環(huán)計(jì)數(shù)器。
- Dim blnFound ' 發(fā)現(xiàn)目標(biāo)的標(biāo)記。
- intFindUser = -1
- i = 0 ' 初始化循環(huán)計(jì)數(shù)器。
- Do While i <= Ubound(strUserList) and Not blnFound
- If strUserList(i) = strTargetUser Then
- blnFound = True ' 標(biāo)記設(shè)為 True。
- iintFindUser = i ' 返回值設(shè)為循環(huán)計(jì)數(shù)器。
- End If
- ii = i + 1 ' 循環(huán)計(jì)數(shù)器加 1。
- Loop
- End Function
#p#
CSS類及id中的命名規(guī)則
Web開發(fā)人員可以通過創(chuàng)建CSS類及id名稱并使用這些名稱來對divs以及其他的格式頁面元素進(jìn)行標(biāo)識。對開發(fā)人員來說,在命名重新定義XHTML標(biāo)記(tags)的CSS selectors時(shí),必須保證其與預(yù)定義的標(biāo)記準(zhǔn)確匹配,但就類以及id選擇器名稱而言,則仁者見仁,智者見智。然而隨心所欲的為這些類以及id命名則并不是個(gè)好的習(xí)慣。
直觀命名
當(dāng)在設(shè)計(jì)Web頁面以及需要對一個(gè)div進(jìn)行標(biāo)識的時(shí)候,最自然的想法就是使用可以描述元素所在頁面位置的詞匯來對其命名。
例如:top-panel
horizontal-nav
left-side
center-column
right-col
這些是CSS以及XHTML類和id的有效命名方式。這些詞匯簡單并且能夠使人顧名思義,因此滿足了標(biāo)識頁面元素以及相應(yīng)的CSS樣式的需要。
但問題是這樣的名稱同頁面內(nèi)容的特定表達(dá)方式相關(guān)聯(lián)。這些命名參考了某種特定頁面布局中的頁面元素位置,因此在這樣的布局之外使用就會顯得不合適甚至造成理解混亂。這些命名沒有涉及文檔內(nèi)容的結(jié)構(gòu)。因此,下面給出了對CSS類以及ID命名更好的方法。
結(jié)構(gòu)化命名
這些是CSS以及XHTML類和id的有效命名方式。這些詞匯簡單并且能夠使人顧名思義,因此滿足了標(biāo)識頁面元素以及相應(yīng)的CSS樣式的需要。 這些是CSS以及XHTML類和id的有效命名方式。這些詞匯簡單并且能夠使人顧名思義,因此滿足了標(biāo)識頁面元素以及相應(yīng)的CSS樣式的需要。
有標(biāo)記的相關(guān)信息都是用來描述文檔的結(jié)構(gòu)而不是外觀。這樣的特點(diǎn)使得我們可以通過簡單的改變CSS的方式來對不同外觀格式下的內(nèi)容(content)以及標(biāo)記(markup)進(jìn)行重用。當(dāng)你理解這種方式時(shí),很容易就可以發(fā)現(xiàn)采用頁面位置來為類以及id命名的方式在處理如音頻(audio)等外觀格式上顯得非常不合適。因此,應(yīng)當(dāng)根據(jù)在文檔中的使用目的而非出現(xiàn)位置來對類以及id進(jìn)行結(jié)構(gòu)化命名。
可以按照如下所示的結(jié)構(gòu)化方式來對類以及id名稱命名:
例如:branding
main-nav
subnav
main-content
sidebar
這些名字同直觀命名方式一樣非常易懂,但他們描述了頁面元素的作用而非位置。這使得代碼更加符合使用純粹的結(jié)構(gòu)化標(biāo)記(structural markup)的初衷,即開發(fā)人員可以在不改變標(biāo)記的情況下對各種各樣媒體下的顯示格式進(jìn)行處理。
即使你不打算在其他的媒體上對Web頁面進(jìn)行格式修改,使用結(jié)構(gòu)化命名方式還可以幫助你在日后的站點(diǎn)升級或重新設(shè)計(jì)中更為輕松。例如,結(jié)構(gòu)化命名避免了當(dāng)一個(gè)div同id right-column移動到頁面左邊后所帶來的混亂。對div sidebar的采用這樣的命名方式就顯得更加適當(dāng),因?yàn)闊o論它出現(xiàn)在頁面的哪一邊,這個(gè)名字仍然對開發(fā)人員來說直觀易懂。
慣例
Andy Clarke分析了40份由推崇標(biāo)準(zhǔn)化Web設(shè)計(jì)理念的開發(fā)人員所設(shè)計(jì)的Web站點(diǎn)的源代碼。盡管類以及id名稱很不統(tǒng)一,但是還是發(fā)現(xiàn)了一些頻繁出現(xiàn)的常用名稱。這里給出了最常用類/id名稱的示例列表:
例如:header
content
nav
sidebar
footer
#p#
數(shù)據(jù)庫中的命名規(guī)則
數(shù)據(jù)庫涉及字符規(guī)則
采用26個(gè)英文字母(區(qū)分大小寫)和0 -9這十個(gè)自然數(shù),加上下劃線_組成,共63個(gè)字符。不能出現(xiàn)其他字符(注釋除外)。
據(jù)庫對象命名規(guī)則
數(shù)據(jù)庫對象包括表、視圖(查詢)、存儲過程(參數(shù)查詢)、函數(shù)、約束。對象名字由前綴和實(shí)際名字組成,長度不超過30。前綴:使用小寫字母。
例如:
表 | tb |
視圖 | vi |
存儲過程 | sp |
函數(shù) | fn |
實(shí)際名字
實(shí)際名字盡量描述實(shí)體的內(nèi)容,由單詞或單詞組合,每個(gè)單詞的首字母大寫,其他字母小寫,不以數(shù)字和_開頭。
例如:
表 | User_Info |
視圖 | UserList |
存儲過程 | UserDelete |
因此,合法的對象名字類似如下。
表 | tbUser_Info、tbMessage_Detail |
視圖 | vi_MessageList |
存儲過程 | sp_MessageAdd |
數(shù)據(jù)庫表命名規(guī)則
字段由前綴和實(shí)際名字組成。實(shí)際名字中首單詞一個(gè)系統(tǒng)盡量采取同一單詞。
前綴:使用小寫字母tb,表示表。
例如:
tbMember
tbMember_Info
tbForum_Board
tbForum_Thread1
字段命名規(guī)則
數(shù)字、字符、日期/時(shí)間、lob(大對象)、雜項(xiàng),字段由表的簡稱、下劃線,實(shí)際名字加后綴組成。
后綴:使用小寫字母,代表該字段的屬性。
例如:
User_Idint
User_Namestr
User_RegDatedtm
視圖命名規(guī)則
字段由前綴和實(shí)際名字組成,中間用下劃線連接。
前綴:使用小寫字母vi,表示視圖。
例如:
vi_User
vi_UserInfo
存儲過程命名規(guī)則
字段由前綴和實(shí)際名字組成,中間用下劃線連接。
前綴:使用小寫字母sp,表示存儲過程。
例如:sp_User
數(shù)據(jù)庫設(shè)計(jì)文檔規(guī)則
所有數(shù)據(jù)庫設(shè)計(jì)要寫成文檔,文檔以模塊化形式表達(dá)。大致格式如下:
'-------------------------------------------
' 表名: tbUser_Info
' 建立人:UAM_Richard
' 日期: 2004-12-17
' 版本: 1.0
' 描述: 保存用戶資料
' 具體內(nèi)容:
' UserId int,自動增量 用戶代碼
' UserName char(12) 用戶名字
' ......
'--------------------------------------------
sql語句規(guī)則
所有sql關(guān)鍵詞全部大寫,比如SELECT,UPDATE,FROM,ORDER,BY等。
后記:
良好的命名對于軟件開發(fā)起著至關(guān)重要的作用,能夠?qū)Y源進(jìn)行合理的命名,可以達(dá)到事半功倍的效果。無論是哪種命名規(guī)則,無論是對哪種資源進(jìn)行命名,其核心思想都是“用最少的字母進(jìn)行最全面的描述”。正如本文開始時(shí)強(qiáng)調(diào)的,“唯一性+描述性”是命名的靈魂。所以,在您對程序的各個(gè)方面進(jìn)行命名的時(shí)候,不妨去參照著這兩大原則去進(jìn)行,切記不可圖一時(shí)之快,卻為日后的修改或維護(hù)帶來巨大的困難。
原文鏈接:http://www.blueidea.com/articleimg/magazine/noahweb/4/
【編輯推薦】