C#編程規範-程序員們都應該這樣寫代碼

C#編程規範-程序員們都應該這樣寫代碼  
                                                      -落葉夏日  
  爲了保證大家使用C#編程和C++的風格的連貫,我在C++的標準備上對C#編程規則作了制定(試用版),在這裏感謝大家的支持,特別是Stone   Jiang.    
   
  基本要求  
  1程序結構要求  
  1.1   程序結構清晰,簡單易懂,單個函數的程序行數不得超過100行。  
  1.2   打算幹什麼,要簡單,直接了當,代碼精簡,避免垃圾程序。  
  1.3   儘量使用.NET庫函數和公共函數(無特殊情況不要使用外部方法調用windows的核心動態鏈接庫)。  
  1.4   不要隨意定義全局變量,儘量使用局部變量。  
  2.可讀性要求  
  2.1   可讀性第一,效率第二(代碼是給人讀的J)。  
  2.2   保持註釋與代碼完全一致。  
  2.3   每個源程序文件,都有文件頭說明,說明規格見規範。  
  2.4   每個函數,都有函數頭說明,說明規格見規範。  
  2.5   主要變量(結構、聯合、類或對象)定義或引用時,註釋能反映其含義。  
  2.6   處理過程的每個階段都有相關注釋說明。  
  2.7   在典型算法前都有註釋,   同時算法在滿足要求的情況下儘可能簡單。  
  2.8   利用縮進來顯示程序的邏輯結構,縮進量一致並以Tab鍵爲單位,定義Tab爲   6個  
  字節。  
  2.9   循環、分支層次不要超過五層。  
  2.10   註釋可以與語句在同一行,也可以在上行。  
  2.11   空行和空白字符也是一種特殊註釋。  
  2.12   一目瞭然的語句不加註釋。  
  2.13   註釋的作用範圍可以爲:定義、引用、條件分支以及一段代碼。  
  2.14   註釋行數(不包括程序頭和函數頭說明部份)應占總行數的   1/5   到   1/3  
   
  2.15   常量定義(DEFINE)有相應說明。  
   
     
   
  3.   結構化要求  
   
  3.1   禁止出現兩條等價的支路。  
  3.2   禁止GOTO語句。  
  3.3   用   IF   語句來強調只執行兩組語句中的一組。禁止   ELSE   GOTO   和   ELSE   RETURN。  
  3.4   用   CASE   實現多路分支。  
  3.5   避免從循環引出多個出口。  
  3.6   函數只有一個出口。  
  3.7   不使用條件賦值語句。  
  3.8   避免不必要的分支。  
  3.9   不要輕易用條件分支去替換邏輯表達式。  
   
     
   
  4.   正確性與容錯性要求  
   
  4.1   程序首先是正確,其次是優美  
  4.2   無法證明你的程序沒有錯誤,因此在編寫完一段程序後,應先回頭檢查。  
  4.3   改一個錯誤時可能產生新的錯誤,因此在修改前首先考慮對其它程序的影響。  
  4.4   所有變量在調用前必須被初始化。  
  4.5   對所有的用戶輸入,必須進行合法性檢查。  
  4.6   不要比較浮點數的相等,  
  如:   10.0   *   0.1   ==   1.0   ,   不可靠  
  4.7   程序與環境或狀態發生關係時,必須主動去處理髮生的意外事件,如文件能否  
  邏輯鎖定、打印機是否聯機等,對於明確的錯誤,要有明確的容錯代碼提示用戶。  
  4.8   單元測試也是編程的一部份,提交聯調測試的程序必須通過單元測試。  
   
  4.9   儘量使用規範的容錯語句.  
   
      例如:  
   
  try  
   
  {  
   
  }  
   
  catch  
   
  {  
   
  }  
   
  finally  
   
  {  
   
  }  
   
  5.   可重用性要求  
   
  5.1   重複使用的完成相對獨立功能的算法或代碼應抽象爲asp.net服務或類。  
  5.2asp.net服務或類應考慮OO思想,減少外界聯繫,考慮獨立性或封裝性。  
   
     
   
  附:C#編程規範  
   
  1適用範圍  
   
  本標準適用於利用Visul   C#   ,其餘語言作參考.。  
   
  2變量命名  
   
  命名必須具有一定的實際意義,形式爲xAbcFgh,x由變量類型確定,Abc、Fgh表示連續意  
  義字符串,如果連續意義字符串僅兩個,可都大寫.如OK.  
   
  具體例程:  
   
  BOOL類型         bEnable;  
   
  sz       char           szText  
   
  sb       sbyte           sbText  
   
  bt         byte           btText  
   
  n           int             nText  
   
  ui         uint             uiText  
   
  l           long           lText  
   
  ul         ulong         ulText  
   
  f           float           fText  
   
  d         double         dText  
   
  b         bool             bText  
   
  de       decimal       deText  
   
  str       string           strText  
   
  x,y   座標  
   
  att       表屬性  
   
  m_   類成員變量   m_nVal,   m_bFlag  
   
  s_     類靜態成員變量   s_nVal,s_bFlag  
   
  //不提議用全局變量,其於類的實例,儘量選取表示該類特性的字母,例如classText,class體現類的特性.  
   
  3常量命名和宏定義  
   
  常量和宏定義必須具有一定的實際意義;  
   
  常量和宏定義在#include和函數定義之間;  
   
  常量和宏定義必須全部以大寫字母來撰寫,中間可根據意義的連續性用下劃線連接,每一  
  條定義的右側必須有一簡單的註釋,說明其作用;  
   
  4資源名字定義格式(我對.NET的資源還沒有了解的多),只寫幾個:  
  菜單:IDM_XX或者CM_XX  
  位圖:IDB_XX  
  對話框:IDD_XX  
  字符串:IDS_XX  
  DLGINIT:DIALOG_XX  
  ICON:IDR_XX  
   
  5函數命名和命名空間,類的命名,接口的命名  
  函數原型說明包括引用外來函數及內部函數,外部引用必須在右側註明函數來源:   模  
  塊名及文件名,   如是內部函數,只要註釋其定義文件名;  
  第一個字母必須使用大寫字母,要求用大小寫字母組合規範函數命名,必要時可用下劃線  
  間隔,示例如下:  
   
  void   PrintTrackData   (   );  
   
  void   ShowChar   (int   ,   int   ,char);  
   
  事件函數的命名:  
   
        void   EventH(object   sd,Event   e)     //Event   表示事件響應的函數.  
   
  接口的命名  
   
        接口的命名一般都以’I’作爲首字母,爲了和類區分,例如:  
   
            interface   IA      
   
  命名空間(例如   namespace   A)和類的命名規則從原則上和函數命名相同.  
   
     
   
  6結構體命名  
  結構體類型命名必須全部用大寫字母,原則上前面以下劃線開始;結構體變量命名必須用  
  大小寫字母組合,第一個字母必須使用大寫字母,必要時可用下劃線間隔。對於私有數  
  據區,必須註明其所屬的進程。全局數據定義只需注意其用途。  
   
  示例如下:  
  typedef   struct  
  {  
  char   szProductName[20];  
  char   szAuthor[20];  
  char   szReleaseDate[16];  
  char   szVersion[10];    
  unsigned   long   MaxTables;  
  unsigned   long   UsedTables;  
  }DBS_DATABASE;  
  DBS_DATABASE   GdataBase;  
   
  7   控件的命名:  
   
  C#控件規則爲了和.net類庫統一,分WindowsForm程序和Web程序(也許大家不是很習慣J).  
   
  WindowsForm程序  
   
        用小寫前綴表示類別  
   
                  fm   窗口  
  cmd   按鈕  
  cob   combo,下拉式列表框  
  txt   文本輸入框  
  lab   labal,標籤  
  img   image,圖象  
  pic   picture  
  grd   Grid,網格  
  scr   滾動條  
  lst   列表框  
  frm   fram  
   
  Web程序  
   
        用大寫前綴表示類別  
   
                  Fm   窗口  
  Cmd   按鈕  
  Cob   combo,下拉式列表框  
  Txt   文本輸入框  
  Lab   labal,標籤  
  Img   image,圖象  
  Pic   picture  
  Grd   Grid,網格  
  Scr   滾動條  
  Lst   列表框  
  Frm   fram  
   
  8註釋  
   
  原則上註釋要求使用中文;  
  文件開始註釋內容包括:公司名稱、版權、作者名稱、時間、模塊用途、背景介紹等,復  
  雜的算法需要加上流程說明;  
  函數註釋包括:輸入、輸出、函數描述、流程處理、全局變量、調用樣例等,複雜的函數  
  需要加上變量用途說明;  
  程序中註釋包括:修改時間和作者、方便理解的註釋等;  
  引用一:   文件開頭的註釋模板  
  /******************************************************************  
  **   文件名:  
  **   Copyright   (c)   1998-1999   *********公司技術開發部  
  **   創建人:  
  **   日   期:  
  **   修改人:  
  **   日   期:  
  **   描   述:  
  **  
  **   版   本:  
  **----------------------------------------------------------------------------  
  ******************************************************************/  
   
  引用二:   函數開頭的註釋模板  
  /*****************************************************************  
  **   函數名:  
  **   輸   入:   a,b,c  
  **   a---  
  **   b---  
  **   c---  
  **   輸   出:   x---  
  **   x   爲   1,   表示...  
  **   x   爲   0,   表示...  
  **   功能描述:  
  **   全局變量:  
  **   調用模塊:  
  **   作   者:  
  **   日   期:  
  **   修   改:  
  **   日   期:  
  **   版本  
  ****************************************************************/  
  引用三:   程序中的註釋模板  
  /*----------------------------------------------------------*/  
  /*   註釋內容   */  
  /*----------------------------------------------------------*/  
   
  9   程序  
  a.   程序編碼力求簡潔,結構清晰,避免太多的分支結構及太過於技巧性的程序,  
  儘量不採用遞歸模式。  
  b.   編寫程序時,亦必須想好測試的方法,換句話說,”單元測試”   的測試方案應  
  在程序編寫時一併擬好。  
  c.   註釋一定要與程序一致。  
  d.   版本封存以後的修改一定要將老語句用/*   */   封閉,不能自行刪除或修改,並要  
  在文件及函數的修改記錄中加以記錄。  
  e.   程序中每個block   的開頭   ”{"   及   "}”   必須對齊,嵌套的block   每進一套,  
  縮進一個tab,TAB   爲4個空格,block類型包括if、for、while、do等關鍵字引出的。  
  f.   對於比較大的函數,每個block   和特殊的函數調用,都必須註明其功能.   
 
發佈了46 篇原創文章 · 獲贊 0 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章