--- tags: 程式撰寫規則,變數命名規則,SC --- <!-- TOC START min:1 max:3 link:true asterisk:false update:true --> - [程式撰寫命名規則](#程式撰寫命名規則) - [第1章 命名規範](#第1章-命名規範) - [1. 類別](#1-類別) - [2. 字串(成員)](#2-字串成員) - [3. 方法](#3-方法) - [4. 屬性](#4-屬性) - [5. 參數](#5-參數) - [6. 常數](#6-常數) - [7. 介面](#7-介面) - [8. 事件](#8-事件) - [9. 命名空間](#9-命名空間) - [第2章 註解規範](#第2章-註解規範) - [1. 檔案標頭](#1-檔案標頭) - [2. 類別及成員](#2-類別及成員) - [第3章 內文規範](#第3章-內文規範) - [1. 縮寫規範](#1-縮寫規範) - [2. 排版](#2-排版) - [3. 語句結構](#3-語句結構) - [4. 代碼縮排](#4-代碼縮排) - [5. 大小寫](#5-大小寫) - [6. 重複名稱](#6-重複名稱) - [7. SQL編碼](#7-sql編碼) - [8. 軟體架構](#8-軟體架構) - [9. 系統](#9-系統) - [第4章 常見變數命名規則](#第4章-常見變數命名規則) - [CamelCase(駝峰式命名法, camelCase)](#camelcase駝峰式命名法-camelcase) - [Pascal Case(Pascal Case)](#pascal-casepascal-case) - [Snake Case(Snake_Case)](#snake-casesnake_case) - [Kebeb Case(Kebeb-Case)](#kebeb-casekebeb-case) - [第4章 參考資料](#第4章-參考資料) - [附表1 各種型別命名規範總結](#附表1-各種型別命名規範總結) - [附表2 資料型別縮寫規則](#附表2-資料型別縮寫規則) - [附表3 Windows控制元件撰寫規則](#附表3-windows控制元件撰寫規則) - [附表4 資料庫物件撰寫規則](#附表4-資料庫物件撰寫規則) <!-- TOC END --> # 程式撰寫命名規則 *** # 第1章 命名規範 ## 1. 類別 1. 使用Pascal規則命名類別名,即開頭字母要大寫。 2. 使用能夠反映類別功能的名詞或名詞片語命名類別。 3. 不要使用“I”、“C”、“_”等特定含義字首。 4. 自定義異常類別應以Exception結尾。 5. 檔名要能反映類別的內容,最好是和類別同名。 規則 1.1 ``` csharp Class Test { ... } ``` 規則 1.4 ``` csharp Class TestException { ... } ``` ## 2. 字串(成員) 1. 用camel規則來命名類別成員變數名稱,即單字開頭(或單字縮寫)小寫。 2. 類別欄位變數名前可加“_”字首。 3. 禁止在普通變數前加“m_”(這是VC老命名規則)。 規則 2 ``` csharp Class Test { privatestring myName; privatestring _myCoCo; ... } ``` ## 3. 方法 1. 方法名採用Pascal規則,第一個字元要大寫。 2. 方法名應使用動詞或動詞片語。 3. 類別中訪問修飾符或功能相同的方法應該放在一起, 且公共或實現介面的方法在前。 規則 3 ``` csharp Class Test { ... publicvoid GetData(...) { ... } privatevoid GetName(...) { ... } privatestatic void GetCount(...) { ... } } ``` ## 4. 屬性 1. 使用名詞定義屬性,屬性使用Pascal規則,開頭字元大寫。 2. 屬性和相應欄位名稱要關聯, 可以使用“重構”選單來生成屬性。 規則 4 ``` csharp Class Test { private string myName; public string MyName { set { myName = Value; } get { return myName; } } } ``` ## 5. 參數 1. 引數採用camel規則命名,且開頭字元小寫。 2. 使用描述性引數名稱,引數名稱應當具有足夠的說明性。 3. 不要給引數加匈牙利語型別表示法的字首。 4. 檢查方法所有輸入引數的有效性。 規則 5 ``` csharp Class Test { public void GetData(string name,string strFlag) { ... } } ``` ## 6. 常數 1. 唯讀常數使用Pascal規則命名,即開頭字母大寫。 2. 列舉名使用Pascal規則命名,列舉成員本質屬於常數,命名規則同上。 3. 列舉值從小到大順序定義。 4. 靜態欄位或屬性採用Pascal規則,即開頭字元大寫。 規則 6 ``` csharp Class Test { public const double Pi = 3.14159365753; private readonly double Pai = 3.14159365753; } ``` ## 7. 介面 1. 介面定義使用Pascal規則,且必須以大寫“I”開頭。 2. 介面名稱要有意義,中間不要有下劃線“_”等字元。 3. 如果類實現了介面,名稱儘量和介面相同, 只是省掉“I”字元。 規則 7 ``` csharp interface ITest { ... } ``` ## 8. 事件 1. 委託名稱採用Pascal規則,即開頭字元大寫。 2. 定義事件的委託要使用EventHandler字尾,且包括sender和e兩個參數。 3. 事件用到的參數,名稱要帶EventArgs字尾。 規則 8 ``` csharp Class Test { private delegate void DoTask(); private event DoTask DoTaskEventHandler; private event DoTask DoTaskEventHandler(Object sender,EventArgse); private event DoTaskDoTaskEventHandler2(string strEventArgs) } ``` ## 9. 命名空間 1. 名稱空間名稱採用Pascal規則,且開頭字元大寫。 2. 名稱空間名稱儘量反映其內容所提供的整體功能。 規則 9 ``` csharp namespace MyTest { Class Test { ... } ... } ``` # 第2章 註解規範 ## 1. 檔案標頭 1. 檔案都包含檔案標頭, 要說明檔名、作者、建立時間、變更記錄。 2. 推薦採用.NET形式書寫頭部註釋。(待考查) ## 2. 類別及成員 1. 對方法和類別使用“///”三斜線註釋。 2. 程式碼行文註釋採用“//”和“/**/”進行,應該儘量說明問題。 # 第3章 內文規範 ## 1. 縮寫規範 1. 識別符號應當直觀可望文知意,不提倡使用任何縮寫。 2. 字串變數推薦是用“str”或“s”開頭,採用string.Empty來初始化。 3. 普通物件可以以“obj”開頭。 4. 縮寫可自行定義,一般取單詞的前/後字元組成,以含義直觀為準則。 5. 一般情況下不要讓縮寫破壞識別符號的含義。 ## 2. 排版 1. 每行語句至少佔一行,如果語句過長(超過一個螢幕),則該語句斷為兩行顯示。 2. 把相似的內容放在一起,比如欄位、屬性、方法、事件等,使用“#region--#endregion”命令分組。 3. 多個程式元素進行對等操作時, 邏輯運算子之前、之後或者前後都要加空格。 4. 每個方法的源程式行數原則上應該少於200行。(如果超過過多,則需要另寫一方法) 5. 語句巢狀層次不得超過3層。 6. 避免相同的程式碼段在多個地方出現。(儘量避免程式碼重複,能重複利用則重複利用) ## 3. 語句結構 1. 如果使用了異常結構,一定要處理異常, 一般是要寫日誌檔案。 2. 分支語句不應該使用複雜長條件, 應該將長條件封裝成方法。 3. switch語句,case後面必須接break。 4. 禁止使用goto語句進行跳轉。 5. 行文中嚴禁出現“魔術數字”,特定含義的常數必須定義成列舉或常量。 6. 不同型別的操作符混合使用時,使用括號給出優先順序。 7. 不允許使用複雜的邏輯運算子組合等。 8. 迴圈、判斷語句的程式塊部分用大括號括起來, 即使只有一條語句。(return;待議) 9. 在switch語句中總是要有default字句,建議使用斷言。 10. 每個類別和方法完成單一的功能,不設計多用途面面俱到的類別或方法。 11. 嚴禁使用未經初始化的變數,變數通常使用構造方法來初始。 ## 4. 代碼縮排 1. 碰到大括號要換行。 2. 不允許使用Java中的括號換行規範。 ## 5. 大小寫 1. 不要建立名稱相同,但大小寫區別的任何元素。 2. 不要把易混淆的數字和字元放在一起。 3. 使用英文命名識別符號。 ## 6. 重複名稱 1. 不允許變數名、類別名、屬性名、 方法名等與系統識別符號重名。(系統識別符號見附表) ## 7. SQL編碼 1. SQL語句全部大寫。 2. 對較為複雜的SQL語句加上註釋,說明其功能。 3. 連線符OR、IN、AND、以及=、<=、>=等前後加空格。 4. 使用明確的列代替 SELECT *。 ## 8. 軟體架構 1. 資料庫中每一張表對應一個實體類/資料傳輸物件(DTO)。 2. 實體類名稱使用表名,也可帶有Dto字尾。 3. 三層架構應當合理使用,不應生搬硬套。 4. 三層架構元素推薦使用字尾: | 項目 | 命名 | |-----------------|------------------------------| | 資料傳輸物件 | XxxDAOFactory | | DAO工廠 | XxxDAOFactory | | DAO介面 | IXxxxDAO | | 服務介面 | IxxxxService | | DAO的資料庫實現 | XxxxDAOOracle/XxxxDAOInfomix | | 業務邏輯 | XxxxManager | ## 9. 系統 1. 系統輸入、資源操作(如記憶體分配、檔案及目錄操作)、網路操作(如通訊、呼叫等)、任務間的操作(如通訊、呼叫等)時必須進行錯誤、超時、或則異常處理。 2. 模組的編寫應有完善的測試方面的考慮。 # 第4章 常見變數命名規則 ## CamelCase(駝峰式命名法, camelCase) 中文是完全照自命上去翻譯,就像駱駝的峰一樣。 - 命名方式:通常是只第一單字小寫,其他單字大寫的情況。 - 例子:getVariableName,cartItems,testHowToGetAName等 - 常用場景:適用於一般變數/方法。 有人會依第一個字母的大小寫分為兩類:Lower Camel Case, Upper Camel Case,不過Upper Camel Case又稱為Pascal Case,所以比較少人這樣稱呼。 又因這個特性,所以有人會以camelCase稱呼,剛好第一個字小寫,第二個字大寫。 ## Pascal Case(Pascal Case) 如上面所述,有人也稱它為Upper Camel Case,泛指所有單字第一個自都大寫的命名方式。 - 命名方式:單字都大寫。 - 例子:UserRepository。 - 常用場景: Class名稱。。 ## Snake Case(Snake_Case) 如字面的意思,像蛇一樣,所以是用底線連結。 - 命名方式:在單字間加入底線。 - 例子:ITEM_TYPE, created_at, updated_at等。 - 常用場景:const變數名稱,資料庫欄位名稱。 ## Kebeb Case(Kebeb-Case) Kebeb本身是烤肉串的意思,變數就像烤肉串一樣串在一起。 - 命名方式:在單字間加入破折號hyphen。 - 例子:good-to-eat, cart-item。 - 常用場景:通常會用在網址。如本篇的naming-convention # 第4章 參考資料 - [我自己總結的C#開發命名規範整理了一份](https://www.itread01.com/content/1548747388.html) - [常見變數命名規則(Naming convention)](https://dustinhsiao21.github.io/laravel/naming-convention/) # 附表1 各種型別命名規範總結 | 型別 | 命名規則 | 注意事項 | 例項 | |----------------|----------|---------------|-----------------------| | 類別或結構 | Pascal | 開頭字元大寫 | HttpContext | | 介面 | Pascal | 前綴I | IDataAdaper | | 列舉名 | Pascal | 開頭字元大寫 | CommandType | | 列舉值 | Pascal | 開頭字元大寫 | CommandType.Text | | 事件 | Pascal | 開頭字元大寫 | SelectedIndexChanged | | 自定義異常 | Pascal | 後綴Exception | ArgumentException | | 類公共欄位 | Pascal | 開頭字元大寫 | MaxValue(或_MaxValue) | | 方法 | Pascal | 開頭字元大寫 | ToString() | | 名稱空間 | Pascal | 開頭字元大寫 | System.Xml | | 屬性 | Pascal | 開頭字元大寫 | BackColor | | 保護或私有欄位 | Camel | 開頭字元小寫 | myVariable | | 引數 | Camel | 開頭字元小寫 | cmdText | # 附表2 資料型別縮寫規則 | 資料型別 | 資料型別縮寫 | 標準命名例項 | |------------------|--------------|--------------| | Byte | bt | btImages | | SByte | sbt | sbtImages | | Short | s | sHandle | | Unsigned Short | ushort | ushortHandle | | Integer | i | iNumber | | Unsigned Integer | uint | uintNumber | | Long | l | lNumber | | Unsigned Long | ulong | ulongNumber | | Float | f | fPrice | | Double | d | dPrice | | Decimal | dec | decPrice | | Char | ch | chCode | | Bool | is | isVisable | | Object | obj | objCloth | | Unit | u | uAge | | String | str | strName | | DateTime | dat | datDay | | Struct | st | stStudent | | Window | wnd | wndMain | | ArrayList | lst | lstStudents | | Array | arr | arrStudents | | List | list | listData | | Hashtable | ht | htStudents | # 附表3 Windows控制元件撰寫規則 直接使用winform元件名添加底線後面接命名 | 控制元件型別 | 控制元件名稱 | 範例 | |:-----------------|:------------------|:------------------------| | label | 標籤 | label_Message | | LinkLabel | 超連結標籤 | LinkLabel_Today | | Button | 按鈕 | Button_Save | | TextBox | 文字方框 | TextBox_Name | | MainMenu | 主選單 | MainMenu_File | | CheckBox | 核取方框 | CheckBox_Stock | | RadioButton | 單選按鈕 | RadioButton_Selected | | GroupBox | 群組方框 | GroupBox_Main | | PictureBox | 圖片方框 | PictureBox_Image | | Panel | 面板 | Panel_Body | | DataGrid | 數據顯示表格 | DataGrid_View | | ListBox | 列舉方框 | ListBox_Products | | CheckedListBox | 多選框列舉框 | CheckedListBox_Items | | ComboBox | 下拉式方框 | ComboBox_Style | | ListView | 列表檢視 | ListView_Alarms | | TreeView | 樹狀檢視 | TreeView_Files | | TabControl | 分頁控制 | TabControl_Mode | | DateTimePicker | 日期時間選擇器 | DateTimePicker_Hours | | HscrollBar | 水平捲軸 | HscrollBar_Move | | VscrollBar | 垂直捲軸 | VscrollBar_PowerControl | | Timer | 計時器 | Timer_ReadStatus | | ImageList | 圖片列舉器 | ImageList_Images | | ToolBar | 工具欄 | ToolBar_Manage | | StatusBar | 狀態欄 | StatusBar_FoorPrint | | OpenFileDialog | 檔案開啟對話方塊 | OpenFileDialog_File | | SaveFileDialog | 檔案儲存對話方塊 | SaveFileDialog_Save | | FoldBrowserDialog | 資料夾檢視對話方塊 | FoldBrowserDialog_Folder | | FontDialog | 字體選擇對話方塊 | FontDialog_Font | | ColorDialog | 顏色選擇對話方塊 | ColorDialog_Color | | PrintDialog | 列印選擇對話方塊 | PrintDialog_Print | # 附表4 資料庫物件撰寫規則 直接使用資料庫元件名添加底線後面接命名 | 資料庫物件 | 範例 | |:--------------|:----------------------| | Connection | Connection_Northwind | | Command | Command_ReturnProducts | | Parameter | Parameter_ProductID | | DataAdapter | DataAdapter_Products | | DataReader | DataReader_Products | | DataSet | DataSet_Northwind | | DataTable | DataTable_Product | | DataRow | DataRow_Number | | DataColumn | DataColumn_Items | | DataRelation | DataRelation_OtherData | | DataView | DataView_AllData |