--- 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 |
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.