《.NET 設計規范》是數千名微軟精銳開發人員的經驗和智慧,最終濃縮在這本設計規范之中。它指導着.NET Framework幾個版本的開發,和微軟windows操作系統的下一代API---WinFX開發。上面這些話是C#之父說的,不是我。它指導着微軟內部開發規范,可見是一本非常好的書,而且博客園的其他大牛也推薦過的,是一本修煉內功的武功秘籍。
為什么需要命名規范?
1、提高框架的可用性,一致性。使的不同項目的開發人員使用同一個框架成為可能。大到一個Framework,小到一些控件(Grid)或者封裝的庫,他們中的API都是為其他開發者所使用的,固良好的命名很重要。就比如:.NET Framework它里面的命名,開發組就花費了大量的時間,大量的討論,甚至非常高的代價去做,並認為是非常重要的。
2、增加代碼的可讀性。良好的命名可以是代碼易於理解,從名字上面就可以大概知道它的功能,一目了然。使得開發人員相互的溝通更為暢通。如果一個人的代碼寫的非常規范,那么其他人在閱讀或者維護的時候,就比較容易了,可見從命名規范上就可以看出一個人境界。
標示符的大小寫規范
1、PascalCasing。隨着Pascal(Turbo Pascal最初的設計師-Anders Hejlsberg-C#之父 )編程語言的流行起來的大小寫風格稱為PascalCasing。它被用於除了參數名之外的所有標示符,每個單詞的首字母都大寫。如:ObjectContext,HtmlTag
2、camelCasing。這種大小寫風格看上去就像一個駝峰。它僅僅用於參數的名字。除了第一個單詞小寫之外,其他單詞首字母都大寫。如:userName,htmlTag。
首字母縮寫與單詞縮寫
像首字母縮寫詞(比InputOutput首字母縮寫詞為IO)為兩個的,他們要么全部大寫,要么全部小寫,如IOStream,ioStream。但首字母縮寫詞的長度超過2個,則視為一個單詞,如Html,Xml,html,xml等。
首字母縮寫是將一個短語的首字母組成,而單詞縮寫僅僅把一個單詞的長度變短。請盡量使用已經被世人認可的首字母縮寫詞,單詞縮寫盡量的不用,因為這樣會降低可讀性的。例如該書上給出一個例子,在.NET 框架中有Color.FromArgb方法,它是一個縮寫過度的例子,Argb讓人聯想到是參數b,arg如果是argument的縮寫,這顯示不是API設計者的本意。在這里A表示的是alpha通道,所以如果設計成這樣Color.FromAlphaRgb或許更符合規范。但.FromArgb API已經隨框架中發布出去,就不能隨便改了。
復合詞
復合詞應該視為一個單詞。如endpoint,Endpoint,常見術語大小寫,在這里列出容易寫錯的一些。Pascal\camel :Callback\callback、Email\email、Gridline\gridline、Hashtable\hashtable、Id\id、Namespace\namespace、Ok\ok、Pi\pi、SignIn\signIn、LogOn\logOn
單詞的選擇
1、要選擇易於閱讀的名字
2、要看重可讀性,而不是更看重簡潔性。如:GetWindow要比GetWin要好
3、不要使用下划線,連字符及其他任何既非數字字母的字符。
4、不要使用匈牙利命名法。匈牙利命名法是用一些前綴,比如uiCount表示無符號整數,intCount,在這里ui或者int的前綴。但我們在私有實例字段時候,可以考慮加上前綴m_,如m_count ,這樣區別於其他成員,該私有實例字段暴露給外界使用屬性,屬性的命名采用PascalCasing。給私有靜態字段加前綴s_,便於區分,這並不和上面的規范沖突,規范是人約定的,合適的變通,才是王道。對於現代的編輯器來說,將鼠標放在變量上面,就會提示出類型。
5、避免使用與廣泛編程語言有沖突的標示符。
在為已有API新增版本命名時候,優先使用后綴來表示已有API的新版本。因為Intellisense會把它們的位置放的很近。或者考慮新的名字。
總結
1、除了參數用camelCasing之外,其他大部分都是PascalCasing命名約定。
2、標示符要使用有意義的名字。如GetLength比GetInt要好,不要嫌單詞很長(有自動補全功能),不要使用自創的單詞一部分。
3、標示符的含義要比含有類型更為重要。如形參(string value)而不是(string str),在這里value表示一個值,而str表示出它的類型是string。在如foreach(string item in collection){}中的item。
4、不要在變量名或者參數命中使用下划線。如果一個標示符中的單詞可有可無,那還是去掉,這樣簡潔些。
5、模仿學習框架中的命名,如果你的代碼和框架的代碼無法區分時,那么你的代碼就相當的牛X了
本為主要目的是讓大家了解基本的命名約定,或者能幫助大家對命名規范有些重要的認識,就滿足了。當然《.NET 設計規范》 命名規范這章中,還有其他的一些規范,沒有列出,請有興趣的同學自己去看了,謝謝!文中描述如果有不妥之處,還請高手指出,我們共同進步,謝謝!