一個好的名字能夠讓你的程序更加好懂,別人一看到這個名字,就能夠猜到你在做什么。大量好的名字離不開好的命名規(guī)范,而一個好的命名規(guī)范要做到兩點:
l 合理。即容易被大家接受和使用。從這個意義上來說,好的命名規(guī)范不應該太長,它應該讓你花上10分鐘就能看完,寫過幾段代碼就能熟悉。
l 風格一致。即前后一致,例外的情況少。
符合以上兩點的命名規(guī)范就是好的,雖然它們具體的規(guī)則可能不同。有的時候,命名規(guī)范體現(xiàn)了編程思想,比如:對于接口,在.NET中,一般要求以“I”開頭,在java中沒有這個要求,原因是Java認為接口和抽象類往往可以轉(zhuǎn)化,比如:在項目初期,可能定義的是接口,而在后面,可能把它改成抽象類,如果名稱一致,就避免了名稱的改動。
另外,不同的命名規(guī)范也體現(xiàn)了程序發(fā)展歷程。比如:匈牙利命名法要求類型前綴,故在C++、VB、PB一般都會大量出現(xiàn)類型前綴,像intAmount, strName等。而現(xiàn)在一般沒有這個要求,原因是:1)有些類型可能會做修改,比如Int16變成Int32。另外對于一些動態(tài)語言(Python、JavaScript)來說,其類型是變化的,編譯時無法確定;2)現(xiàn)在的開發(fā)環(huán)境更加的友好,即使在開發(fā)的時候,你也很容易知道變量的類型(只要鼠標移上去)。
本文的命名規(guī)范主要基于微軟的標準,另外加上實際開發(fā)的一些具體經(jīng)驗。它還在不斷的維護和完善,你可以針對不同項目的要求,做相應的調(diào)整。
命名樣式
樣式分類
解釋 | 適用環(huán)境 | 例子 | |
Pascal 大小寫 | 首字母和后面的每個單詞的首字母都大寫;其他字母小寫 | BackColor | |
Camel 大小寫 | 首字母小寫,而后面的每個單詞的首字母大寫;其他字母小寫 | backColor | |
大寫 | 所有字母都大寫 | l 縮寫。 l 少于等于2個字符 | System.IO System.Web.UI |
樣式的選擇
標識符 | 命名格式 | 例子 | 備注 |
參數(shù)、局部變量 | Camel | public int GetTypeID(string typeName) { int typeID; … } | |
PRivate、Protected的實例字段 | Camel | private string redValue; protected bool isOk; | |
界面控件 | Camel | private Label lblAlarm; | |
縮寫 | 大寫 | namespace System.IO { … } | 縮寫必須是被普遍接受、眾所周知的縮寫。 |
除上面的標識符外 | Pascal | public System.Drawing.Color BackColor { … } |
原則和習慣
首要原則
有意義的,描述性的詞語來命名。能夠一眼看出它作什么。別使用會引起誤解的名字。如果名字一目了然,就無需用文檔來解釋方法的功能了
1. 除約定俗成的,別用縮寫。用name, address, salary等代替 nam, addr, sal
2. 除用于循環(huán),別使用單個字母的變量象i, n, x 等. 而要使用 index, temp等。
for ( int i = 0; i < count; i++ ){ ...}
其他習慣
l除了界面控件外,不要使用類型前綴。比如:使用名稱amount,而不是 intAmount;
l類:使用名詞、名詞短語命名。比如:public class FileStream;
l方法:使用動詞、動詞短語開始。比如:CreateUser(), RemoveAt()等;
l接口:以 I 開始,后面加上名詞、名詞短語、形容詞命名。比如:IDisposable;
l常量:所有單詞大寫,多個單詞之間用 "_" 隔開。public const string PAGE_TITLE = "Welcome";
l命名空間:
1.基本格式:
CompanyName/ProjectName.TechnologyName[.Feature][.Design]
a)CompanyName/ProjectName:公司名、項目名稱或產(chǎn)品名稱;
b)TechnologyName:穩(wěn)定的、公認的技術(shù)名稱或架構(gòu)層次名稱;
c)[.Feature][.Design]:可選的功能與設計;
例如:
//微軟公司的Web開發(fā)中的UI中的Design
namespace Microsoft.Web.UI.Design
//西門子報價項目中業(yè)務邏輯層中的項目管理
namespace SiemensQuotation.BusinessRules.ProjectManagement
2.幾個規(guī)則
a)嵌套的命名空間應當有依賴關(guān)系。例如:System.Web.UI.Design 中的類依賴于 System.Web.UI 中的類,而不能相反。
b)命名空間和類不能使用同樣的名字。例如,命名空間Debug下最好不要又一個類名為Debug。
c)如果公司名、項目名稱或產(chǎn)品名稱太長的話,可以用縮寫(且全部大寫)。
控件命名控件的名稱中需要加上前綴,之所以這樣做是為了區(qū)分界面的控件和普通的對象,由于界面修改往往非常頻繁,區(qū)分開來能使你更快速的找到控件,從而修改界面。舉一個例子:
界面有10個TextBox、10個Label。一個TextBox對應一個Label,為了完成讀寫,你至少要有20條語句來從控件進行取、賦值操作,如果有前綴的話,輸入this.txt,你就幾乎馬上能找到這個控件。反之,如果沒有前綴,由于窗口或頁面對象擁有大量的屬性和變量(>100個),你將花費大量時間來查找。另外一個TextBox對應一個Label(一個代表值,一個代表名稱),它們往往指同一樣事物,如果有前綴,就很容易區(qū)分這兩個控件。
控件 | 前綴 | 備注 |
Label | lbl | 比如:lblName |
TextBox | txt | |
Button | btn | |
CheckBox | chk | |
RadioButton | rdo | |
CheckBoxList | chklst | |
RadioButtonList | rdolst | |
ListBox | lst | |
DropDownList | ddl | |
DataGrid | dg | |
DataList | dl | |
Image | img | |
Table | tbl | |
Panel | pnl | |
LinkButton | lnkbtn | |
ImageButton | imgbtn | |
Calender | cld | |
RequiredFieldValidator | rfv | |
CompareValidator | cv | |
RangeValidator | rv | |
RegularExpressionValidator | rev | |
ValidatorSummary | vs |
新聞熱點
疑難解答