前言
由於目前使用者對應用程式功能的要求越來越複雜,而應用程式的開發也慢慢地走向 團隊開發的模式,寫出來的程式碼不再只是自己一個人看而已,往往必須在各個成員之接手傳閱。而團隊成員,就算是獨立工作的個人若能養成良好的程式寫作習 慣,不只是程式碼的後續維護容易,程式碼也容易閱讀。
良好的程式寫作習慣,除了適當的註解、縮排,最重要的可能要算是命名原則了。因為最近開發工具的功能強大,已經有自動縮排的功能,就算不想縮排也困難。
而良好的命名原則,可以讓程式碼看起來就像是一篇【文章】一樣,名稱自己就已經在說明自己的功用了,也因此可以減少說明文件的製作。
對於物件、變數、方法、類別‥等識別子名稱的命名,以往流行一段時間的匈牙利命名法,漸漸地已不被採用,而微軟內部開發.NET Framework已訂出一套命名指導原則,如果仔細地留意一下Visual Studio自動為我們產生的程式碼,查看各個識別子的命名方式,應該也能體會得出來。
PascalCasting或camelCasting
識別子的命名,必須只使用英文字,而在最後許可加數字做為相同的名稱的區別。而英文字必須使用有意義的單字組合,或為人共識的英文縮寫(例:Xml、 Html、Linq..)。有時為了能清楚表明識別子所代表的含意,可能會使用兩三個英文單字組成一個識別子名稱,為了不使各個單子糾結在一起,而分不辨 不清楚單字的意思,所以各個單字(或縮寫)的第一個字母要大寫。
而單字組成的識別子名稱的第一個字母,因應情況會有大寫和小寫兩種命名方式,第一個字母大寫稱為:PascalCasting命名,而第一個字母小寫稱為:camelCasting命名。
而一些已經被公認的複合字(Compond Words)必須被識為一個單字,也就是可查當今比較被公認且流行的字典,看看字典是否有將兩個單字複合成一個單字看待。以下列表出一些命名例子,讀者看了應該可以體會出規則。
| PascalCasting命名 | camelCasting命名 | 不正確用法 |
| BitFlag | bitFlag | Bitflag |
| Callback | callback | CallBack |
| Canceled | canceled | Cancelled |
| DoNot | doNot | Dont |
| Email | email | EMail |
| Endpoint | endpoint | EndPoint |
| FileName | fileName | Filename |
| Gridline | gridline | GridLine |
| Hashtable | hashtable | HashTable |
| Id | id | ID |
| Indexes | indexes | Indices |
| LogOff | logOff | LogOut |
| LogOn | logOn | LogIn |
| Metadata | metadata | MetaData, metaData |
| Multipanel | multipanel | MultiPanel |
| Multiview | multiview | MultiView |
| Ok | ok | OK |
| SignIn | signIn | SignOn |
| SignOut | signOut | SignOff |
理解了何謂:PascalCasting與camelCasting後,接下來就是什麼場合該使用PascalCasting,什麼場合又該使用camelCasting,接下來的列表會做分類說明:
| 識別子 | 命名方式 | 範例 |
| Namespace | Pascal | Namespace System.Security ...... ...... End Namespace |
| Type | Pascal | Public Class StreamReader ..... ...... End Class |
| Interface | Pascal | Public Interface IQuackBehavior .... ..... End Interface |
| Method | Pascal | Public Class SomeObject Public Function ToString() As String End Class |
| Property | Pascal | Public Property SafeStock() As Integer Get ...... End Get Set(ByVal value As Integer) ..... End Set End Property |
| Event | Pascal | Public Event SelectObject As EventHandler(Of SelectObjectArgs) |
Fields (Shared) | Pascal | Public Shared InfiniteTimeout As TimeSpan |
| Enum value | Pascal | Public Enum ExecutionLocations Client Server End Enum |
| Parameter | Camel | Private Sub RebindUI(ByVal saveObject As Boolean) ... ... End Sub |
結語
本文約略地說明一下,程式碼撰寫時,一些視別子(Identifier)的命名原則,而其它尚有些許小細節未能詳盡說明,但是讀者首先能明瞭何謂 PascalCasting與camelCasting後,接著再留意一下,Visual Studio自動產生的程式碼的命名方式,漸漸地將能體會各種命名的使用時機及方式。良好的程式寫作習慣應該在開始入門學習時就該留意養成,若等到程式設 計功力到了一定程度後再想改,那可能會造成不容易克服既定的習慣。