科學院軟件開發(fā)編碼規(guī)范-Cpp_第1頁
科學院軟件開發(fā)編碼規(guī)范-Cpp_第2頁
科學院軟件開發(fā)編碼規(guī)范-Cpp_第3頁
科學院軟件開發(fā)編碼規(guī)范-Cpp_第4頁
科學院軟件開發(fā)編碼規(guī)范-Cpp_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、軟 件 開 發(fā) 編 碼 規(guī) 范(C/C+) 編寫: 年月日 校對: 年月日 審核: 年月日 批準: 年月日地址: xxxxx電話: xxxx傳真: xxxxxx目 錄1編寫目的12總則12.1文件風格規(guī)范12.1.1程序頭32.1.2程序體42.2描述和注釋規(guī)范42.3代碼規(guī)范53代碼布局53.1基本格式53.1.1源代碼文件的布局53.1.2using語句書寫順序53.1.3控制語句63.1.4關聯(lián)代碼63.2對齊63.2.1縮進63.2.2分界符63.2.3賦值語句73.3空行空格73.3.1空行分隔73.3.2一元操作83.3.3多元操作83.3.4關鍵字83.3.5函數(shù)名83.3.6其

2、它83.4斷行83.4.1長表達式93.4.2函數(shù)聲明94注 釋95命名規(guī)則136聲明187表達式與語句198類和接口228.1規(guī)則228.2建議229附編程實例231 編寫目的編寫本規(guī)范的目的是為了統(tǒng)一軟件編程風格,提高軟件源程序的可讀性、可靠性和可重用性,確保在開發(fā)成員或開發(fā)團隊之間的工作可以順利交接,不必花很大的力氣便能理解已編寫的代碼,以便繼續(xù)維護和改進以前的工作,提高軟件源程序的質(zhì)量和可維護性,減少軟件維護成本。本規(guī)范自生效之日起,對以后新編寫的和修改的代碼有約束力。2 總則2.1 文件風格規(guī)范代碼文件由兩部分組成:程序頭和程序體。程序頭包括文件描述區(qū)和修改記錄區(qū);程序體由區(qū)段組成,

3、區(qū)段又由代碼段組成,代碼段包括描述區(qū)、代碼區(qū)和注釋區(qū)。程序頭文件描述區(qū)修改記錄區(qū)區(qū)段1開始區(qū)段1結(jié)束代碼段1描述區(qū)代碼段1代碼區(qū)代碼段1注釋區(qū)代碼段n描述區(qū)代碼段n代碼區(qū)代碼段n注釋區(qū) 程序體區(qū)段1開始標記區(qū)段1結(jié)束標記代碼段1描述區(qū)代碼段1代碼區(qū)代碼段1注釋區(qū)代碼段n描述區(qū)代碼段n代碼區(qū)代碼段n注釋區(qū) 區(qū)段n開始標記區(qū)段n結(jié)束標記代碼段1描述區(qū)代碼段1代碼區(qū)代碼段1注釋區(qū)代碼段n描述區(qū)代碼段n代碼區(qū)代碼段n注釋區(qū) 2.1.1 程序頭1文件描述區(qū):(1)格式要求:系統(tǒng)名稱:模塊名稱:作 者:完成日期:設計文檔:內(nèi)容摘要:(2)內(nèi)容1) 在面向?qū)ο蟮拇a文件中,一個文件只包含一個類;2) 所屬系

4、統(tǒng)名稱為正式立項的系統(tǒng)名稱;3) 類的性質(zhì)/版型包括邊界類、控制類、實體類;4) 設計文檔指該類所在的設計模型文檔,如XXXX設計模型.cat文件,XXXX設計模型.MDX文件;5) 主要功能包括前置條件、后置條件、處理過程等。2修改記錄區(qū):當修改文件是變更或修復運維BUG引起的,需要在修改記錄區(qū)注明修改記錄。其他BUG,如為了修復自測,單元測試,集成測試或系統(tǒng)測試產(chǎn)生的BUG都可以不寫修改記錄。(1)格式要求:修改記錄1:修改日期:yyyy-mm-dd修 改 人: 修改內(nèi)容:列出所有的維護和升級內(nèi)容,寫清楚修改的方法。修改記錄2:修改日期: yyyy-mm-dd修 改 人: 修改內(nèi)容:列出所

5、有的維護和升級內(nèi)容,寫清楚修改的方法。(2)內(nèi)容修改內(nèi)容中要列出所有維護和升級內(nèi)容。如:修改內(nèi)容: Bug/變更:2.1.2 程序體1區(qū)段:(1)格式要求:區(qū)段名稱: (2)內(nèi)容1)區(qū)段要有明顯的開始和結(jié)束標記;2)程序體里的區(qū)段要按著如下固定順序排列:類成員變量區(qū)、屬性區(qū)、構(gòu)造函數(shù)區(qū)、方法區(qū)。2代碼段:(1)格式要求:名 稱:內(nèi)容摘要:(2)內(nèi)容1) 描述區(qū)的主要功能不但要說明做什么,還要說明原因,以及如何改變對象。2) 注釋區(qū)不但要說明代碼做了些什么,還要說明這樣做的原因。3) 注釋區(qū)的格式標準與編程語言有關,具體要求參見編碼規(guī)范細則。4) 代碼區(qū)的書寫與編程語言有關,具體要求參見編碼規(guī)范

6、細則。2.2 描述和注釋規(guī)范a) 對于中文版軟件,描述和注釋使用中文。b) 代碼文件中一行的描述和注釋不能超過120列。c) 保證代碼和描述、注釋的一致性,不再有用的注釋要刪除。d) 要保持描述和注釋的簡潔。e) 注釋信息不僅要包括代碼的功能,還應給出原因。f) 代碼中修改記錄的格式的要求,需要列出修改記錄號,日期,內(nèi)容及原因和開始/結(jié)束標識。2.3 代碼規(guī)范a) 保持代碼的簡明清晰,避免過分的編程技巧。要使代碼簡單直白。保持代碼的簡單化是軟件工程化的基本要求。不要過分追求技巧,否則會降低程序的可讀性。b) 編程時首先達到正確性,其次考慮效率。編程首先考慮的是滿足正確性、健壯性、可維護性、可移

7、植性等質(zhì)量因素,最后才考慮程序的效率和資源占用。3 代碼布局代碼布局的目的是顯示出程序良好的邏輯結(jié)構(gòu),提高程序的準確性、連續(xù)性、可讀性、可維護性。更重要的是,統(tǒng)一的程序布局和編程風格,有助于提高整個項目的開發(fā)質(zhì)量,提高開發(fā)效率,降低開發(fā)成本。同時,對于普通程序員來說,養(yǎng)成良好的編程習慣有助于提高自己的編程水平,提高編程效率。因此,統(tǒng)一的、良好的程序布局和編程風格不僅僅是個人主觀美學上的或是形式上的問題,而且會涉及到產(chǎn)品質(zhì)量,涉及到個人編程能力的提高,必須要引起重視。3.1 基本格式3.1.1 源代碼文件的布局源代碼文件包括頭文件、源文件等,布局順序是:#include語句、使用的命名空間,本模

8、塊命名空間、類。正例: #inlcude #include “yyyy.hpp”using TEST_YYY;namespace TEST_xxxclass Sample;3.1.2 #include 語句書寫順序遵循統(tǒng)一的布局順序來書寫include 語句,不同類別的include語句之間用空行分隔。include語句的排列順序:系統(tǒng)級在最前面,接下來是引自外部模塊的,再接下來是本模塊的,同級別按照字母順序排列。正例:#include #include #include / 第三方的#include / 模塊自身的3.1.3 Using 語句書寫順序using語句的排列順序:系統(tǒng)級在最前面,

9、接下來是引自外部模塊的。同級別按照字母順序排列。正例:#include Using Systems;Using Application;3.1.4 控制語句if、else、else if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加 ,這樣可以防止書寫失誤,也易于閱讀。正例:if (varible1 varible2) varible1 = varible2;反例:下面的代碼執(zhí)行語句緊跟if的條件之后,而且沒有加,違反規(guī)則。if (varible1 varible2) varible1 = varible2; 3.1.5 關聯(lián)代碼源程序中關系較為緊密的

10、代碼應盡可能相鄰,這樣便于程序閱讀和查找。正例:iLength= 10;iWidth= 5; / 矩形的長與寬關系較密切,放在一起。StrCaption= “Test”;反例:iLength= 10;strCaption= “Test”; iWidth= 5;3.2 對齊3.2.1 縮進3.2.2 分界符程序的分界符和應獨占一行并且位于同一列,同時與引用它們的語句左對齊。 之內(nèi)的代碼塊使用縮進規(guī)則對齊,這樣使代碼便于閱讀,并且方便注釋。do while語句和結(jié)構(gòu)的類型化時可以例外,while條件和結(jié)構(gòu)名可與 在同一行。正例:void Function(int intVar) / 獨占一行并與引

11、用語句左對齊。while (condition)DoSomething(); / 與 縮進4格反例:void Function(int intVar)while (condition)DoSomething();3.2.3 賦值語句相關的賦值語句等號對齊。正例:tPDBRes.wHead= 0;tPDBRes.wTail= wMaxNumOfPDB - 1;tPDBRes.wFree= wMaxNumOfPDB;tPDBRes.wAddress= wPDBAddr;tPDBRes.wSize= wPDBSize;3.3 空行空格3.3.1 空行分隔不同邏輯程序塊之間要使用空行分隔??招衅鹬指?/p>

12、程序段落的作用。適當?shù)目招锌梢允钩绦虻牟季指忧逦U簐oid Hey(void)Hey實現(xiàn)代碼/ 空一行void Ack(void)Ack實現(xiàn)代碼反例:void Hey(void) Hey實現(xiàn)代碼void Ack(void)Ack實現(xiàn)代碼/ 兩個函數(shù)的實現(xiàn)是兩個邏輯程序塊,應該用空行加以分隔。3.3.2 一元操作一元操作符如“!”、“”、“+”、“-”、“*”、“&”等前后不加空格。“”、“.”這類操作符前后不加空格。正例:!bValueiValue+iCount&fSumaiNumberi = 5;tBox.dWidth 3.3.3 多元操作多元運算符和它們的操作數(shù)之間至少需要一個空格

13、。正例:fValue = fOldValue;fTotal + fValueiNumber += 2;3.3.4 關鍵字關鍵字之后要留空格,if、for、while等關鍵字之后應留一個空格再跟左括號(,以突出關鍵字。3.3.5 函數(shù)名函數(shù)名之后不要留空格。函數(shù)名后緊跟左括號(,以與關鍵字區(qū)別。3.3.6 其它(向后緊跟,)、,、;向前緊跟,緊跟處不留空格。,之后要留空格。;不是行結(jié)束符號時其后要留空格。正例:例子中的 凵 代表空格。 for凵(i凵=凵0;凵i凵凵MAX_BSC_NUM;凵i+)DoSomething(iWidth,凵iHeight);3.4 斷行3.4.1 長表達式長表達式(

14、超過120列)要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當?shù)目s進,使排版整齊。a) 條件表達式的續(xù)行在第一個條件處對齊。b) for循環(huán)語句的續(xù)行在初始化條件語句處對齊。c) 函數(shù)調(diào)用和函數(shù)聲明的續(xù)行在第一個參數(shù)處對齊。d) 賦值語句的續(xù)行應在賦值號處對齊。正例:if (iFormat = CH_A_Format_M) & (iOfficeType = CH_BSC_M) / 條件表達式的續(xù)行在第一個條件處對齊 DoSomething();for (long_initialization_statement;long_condiction_sta

15、tement; / for循環(huán)語句續(xù)行在初始化條件語句處對齊long_update_statement) DoSomething();/ 函數(shù)聲明的續(xù)行在第一個參數(shù)處對齊BYTE ReportStatusCheckPara(BYTE bytCallNo, BYTE bytStatusReportNo);/ 賦值語句的續(xù)行應在賦值號處對齊fltTotalBill = fltTotalBill + fltarrCustomerPurchasesintID+ fltSalesTax(fltarrCustomerPurchasesintID);3.4.2 函數(shù)聲明函數(shù)聲明時,類型與名稱不允許分行書寫。

16、正例:double CalcArea(double dblWidth, double dblHeight);反例:double CalcArea(double dblWidth, double dblHeight);4 注 釋注釋有助于理解代碼,有效的注釋是指在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息,而不是代碼表面意義的簡單重復。對于C文件,使用/* */注釋a) 類、方法、屬性的注釋采用XML文檔格式注釋。文件頭部、代碼間多行注釋為“/* */”,單行注釋采用“/ ”。正例:public class Sample/ 數(shù)據(jù)成員 (單行注釋)private int mPropert

17、y1;/ (XML注釋)/ 示例屬性/ public int Property1get return mProperty1; /* set (多行注釋)mProperty1 = value; */b) 注釋符與注釋內(nèi)容之間要用一個空格進行分隔。正例:/* 注釋內(nèi)容 */ 注釋內(nèi)容反例: /*注釋內(nèi)容*/注釋內(nèi)容c) 類、接口頭部應進行XML注釋。注釋必須列出:類、接口編號、名稱、編碼作者、完成日期、內(nèi)容摘要等。類編號由功能模塊編號和類名兩部分組成,中間用“_”隔開,功能模塊編號使用該類所在的功能模塊的編號,類名用類的名稱。例如:M01_Employee。正例:/ / 類 編 號:/ 類 名 稱

18、:/ 編碼作者:/ 完成日期:/ 內(nèi)容摘要: / d) 方法前面應進行XML注釋。注釋必須列出:主要功能、參數(shù)類型、輸入?yún)?shù)、返回值、調(diào)用的前置條件和后置條件、異常說明、關鍵算法、可見性決策等。正例:/ / 內(nèi)容摘要:根據(jù)工作地編號查詢工作地/ / 工作地編號/ DataSetpublic DataSet QueryWorkPlace(string deptNo)e) 包含在 中代碼塊的結(jié)束處應加注釋,便于閱讀。特別是多分支、多重嵌套的條件語句或循環(huán)語句。此時注釋可以用英文,方便查找對應的語句。對于if語句在15行(包括空行)之內(nèi),或嵌套在3層以內(nèi)的,在結(jié)束處可以不加注釋。正例: void M

19、ain()if () while () /* end of while () */ / 指明該條while語句結(jié)束 /* end of if () */ / 指明是哪條語句結(jié)束 /* end of void main()*/ / 指明函數(shù)的結(jié)束f) 注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。在使用縮寫時或之前,應對縮寫進行必要的說明。避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合適的;在這種情況下,將所有行尾注釋在公共制表位處對齊。正例: 如下書寫比較結(jié)構(gòu)清

20、晰/* 獲得子系統(tǒng)索引 */iSubSysIndex = aDataiIndex.iSysIndex;/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 反例1:如下例子注釋與描述的代碼相隔太遠。/* 獲得子系統(tǒng)索引 */iSubSysIndex = aDataiIndex.iSysIndex;反例2:如下例子注釋不應放在所描述的代碼下面。iSubSysIndex = aDataiIndex.iSysIndex; /* 獲得子系統(tǒng)索引 */反例3:如下例子,顯得代碼與注釋過于緊湊。/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 g) 注釋與所描述內(nèi)容

21、進行同樣的縮排。 可使程序排版整齊,并方便注釋的閱讀與理解。正例: 如下注釋結(jié)構(gòu)比較清晰int DoSomething(void)/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 反例:如下例子,排版不整齊,閱讀不方便;int DoSomething(void)/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 h) 對分支語句(條件分支、循環(huán)語句等)必須編寫注釋。這些語句往往是程序?qū)崿F(xiàn)某一特殊功能的關鍵,對于維護人員來說,良好的注釋有助于更好的理解程序,有時甚至優(yōu)于看設計文檔。i) 通過對函數(shù)或過程、變量、結(jié)構(gòu)等正確的命名以及合理地組織代碼結(jié)構(gòu),使代

22、碼成為自注釋的。5 命名規(guī)則好的命名規(guī)則能極大地增加可讀性和可維護性。同時,對于一個有上百個人共同完成的大項目來說,統(tǒng)一命名約定也是一項必不可少的內(nèi)容。本章對程序中的所有標識符(包括命名空間、變量名、常量名、控件名、參數(shù)名、屬性名、方法名、類名、接口等)的命名做出約定。三種命名規(guī)范說明:Pascal規(guī)范:第1個字符大寫,目標名中的每個單詞的第1個字母也大寫,比如InvoiceNumber或者PrintInvoice。其他的所有字符都小寫。Camel規(guī)范:第1個字符不大寫,但目標名中的每個單詞的第1個字母大寫,比如,invoiceNumber。其他的所有字符都小寫。匈牙利規(guī)范:在目標名中加入表示

23、類型的前綴,前綴小寫,如strName。a) 標識符要采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語拼音來命名。標識符應當直觀且可以拼讀,可望文知義,避免使人產(chǎn)生誤解。程序中的英文單詞一般不要太復雜,用詞應當準確。b) 標識符只能由26個英文字母,10個數(shù)字,及下劃線的一個子集來組成,并嚴格禁止使用連續(xù)的下劃線,下劃線也不能出現(xiàn)在標識符頭或結(jié)尾(預編譯開關和利用工具生成的代碼除外);數(shù)字也不能出現(xiàn)在標識符的頭部。這樣做的目的是為了使程序易讀。因為 variable_name 和 variable_name 很難區(qū)分,下劃線符號_若出現(xiàn)在標識符頭或結(jié)尾,容易與不帶下劃線_的標識符混淆。c)

24、標識符的命名應當符合“min-length & max-information”原則。較短的單詞可通過去掉“元音”形成縮寫,較長的單詞可取單詞的頭幾個字母形成縮寫,一些單詞有大家公認的縮寫,常用單詞的縮寫必須統(tǒng)一。協(xié)議中的單詞的縮寫與協(xié)議保持一致。對于某個系統(tǒng)使用的專用縮寫應該在某處做統(tǒng)一說明。在使用縮寫時,應該按著專業(yè)術語的要求大小寫,例如,IO,而不是 Io。正例:如下單詞的縮寫能夠被大家認可: temp 可縮寫為 tmp ; flag 可縮寫為 flg ; statistic 可縮寫為 stat ; increment 可縮寫為 inc ; message 可縮寫為 msg ;規(guī)定的常用

25、縮寫如下: 常用詞縮寫ArgumentArgBufferBufClearClrClockClkCompareCmpConfigurationCfgContextCtxDelayDlyDeviceDevDisableDisDisplayDispEnableEnErrorErrFunctionFnctHexadecimalHexHigh Priority TaskHPTI/O SystemIOSInitializeInitMailboxMboxManagerMgrMaximumMaxMessageMsgMinimumMinMultiplexMuxOperating SystemOSOverflow

26、OvfParameterParamPointerPtrPreviousPrevPriorityPrioReadRdReadyRdyRegisterRegScheduleSchedSemaphoreSemStackStkSynchronizeSyncTimerTmrTriggerTrigWriteWrd) 采用應用領域相關的術語來命名。軟件開發(fā)人員應注意軟件用戶的一些約定術語,不應當隨意的創(chuàng)造術語,這會降低軟件的易用性。e) 用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等。下面是一些在軟件中常用的反義詞組。 add/remove ; begin/end ; create/destroy

27、 ; insert/delete ; first/last ; get/release ; increment/decrement ; put/get ; add/delete ; lock/unlock ; open/close ; min/max ; old/new ; start/stop ; next/previous ; source/target ; show/hide ; send/receive ;source/destination ; cut/paste ; up/downf) 常量名都要使用大寫字母, 用下劃線 _ 分割單詞。正例:如 DISP_BUF_SIZE、MIN_

28、VALUE、MAX_VALUE 等等。g) 一般變量名不得取單個字符(如i、j、k等)作為變量名,局部循環(huán)變量除外。變量,尤其是局部變量,如果用單個字符表示,很容易出錯(如l誤寫成1),而編譯時又檢查不出,則有可能增加排錯時間。過長的變量名會增加工作量,會使程序的邏輯流程變得模糊,給修改帶來困難,所以應當選擇精煉、意義明確的名字,才能簡化程序語句,改善對程序功能的理解。h) 類方法的局部變量命名采用Camel規(guī)范或匈牙利規(guī)范。常用變量類型前綴列表如下:intIntfltFloatdblDoublechrCharlngLongshtShortblBoolushUshortulnUlongarrA

29、rraystrStringi) 類成員變量名應由前綴+變量名主體組成,變量名的主體應當使用“名詞”或者“形容詞名詞”,且首字母必須大寫。前綴為m或_,一般是對應屬性的私有變量是m開頭的,對應聚合組合依賴等關系的是_開頭。正例: static string mPersonName; static string _PersonName; string mPersonName;string _PersonName;j) 控件命名應采用完整的英文描述符命名,名字的前綴是控件類型名縮寫,符合匈牙利命名規(guī)范。說明:控件縮寫LabelLblTextBoxTxtCheckBoxChkButtonBtnList

30、BoxLstDropDownListDdlstLinkButtonLbtnImageButtonIbtnRadioButtonListRblstCheckBoxListChlstDataGridDgDataListDlHyperLinkHlnkRepeaterRpImageImg等等k) Enum 類型和值命名采用Pascal規(guī)范,不要在 Enum 類型名稱上使用 Enum 后綴。l) 類方法的參數(shù)名命名采用Camel規(guī)范或匈牙利規(guī)范。m) 方法名用大寫字母開頭的單詞組合而成,且應當使用“動詞”或者“動詞名詞”(動賓詞組)。方法名力求清晰、明了,通過方法名就能夠判斷方法的主要功能。方法名中不同

31、意義字段之間不要用下劃線連接,而要把每個字段的首字母大寫以示區(qū)分。函數(shù)命名采用大小寫字母結(jié)合的形式,但專有名詞不受限制。n) 類名采用大小寫結(jié)合的方法,構(gòu)成類名的每個單詞的首字母的首字母也必須大寫。在構(gòu)成類名的單詞之間不用下劃線。a) 名字應該能夠標識事物的特性。b) 名字盡量不使用縮寫,除非它是眾所周知的。c) 名字可以有兩個或三個單詞組成,但通常不應多于三個。d) 在名字中,所有單詞第一個字母大寫。e) 對于異常類的命名,建議由類名主體 + “Exception”后綴構(gòu)成。f) 接口命名在名字前加上“I”前綴,其它和類命名規(guī)范相同。g) 系統(tǒng)數(shù)據(jù)庫對象命名采用小寫首字母組合。系統(tǒng)數(shù)據(jù)庫對象

32、縮寫DataSetDsDataTableDtDataViewDvDataRowDr6 聲明a) 一行只聲明一個變量。正例:int intLevel;int intSize;反例:int intLevel, intSize;b) 一個變量有且只有一個功能,不能把一個變量用于多種用途。一個變量只用來表示一個特定功能,不能把一個變量作多種用途,即同一變量取值不同時,其代表的意義也不同。 c) 變量聲明應該只放在代碼段的開始部分。最好不要到使用時才聲明變量。正例:void Method() int intSample = 0;/ 方法塊的開始 / 其它語句7 表達式與語句表達式是語句的一部分,它們是不

33、可分割的。表達式和語句雖然看起來比較簡單,但使用時隱患比較多。本章歸納了正確使用表達式和if、for、while、goto、switch等基本語句的一些規(guī)則與建議。a) 一條語句只完成一個功能。復雜的語句閱讀起來,難于理解,并容易隱含錯誤。變量定義時,一行只定義一個變量。正例:int intHelp; int intBase;int intResult;iHelp = intBase;iResult = intHelp + GetValue(intBase);反例:int intBase, intResult; / 一行定義多個變量 intResult = intBase + GetValue

34、(intBase); / 一條語句實現(xiàn)多個功能,intBase有兩種用途。b) 在表達式中使用括號,使表達式的運算順序更清晰。由于將運算符的優(yōu)先級與結(jié)合律熟記是比較困難的,為了防止產(chǎn)生歧義并提高可讀性,即使不加括號時運算順序不會改變,也應當用括號確定表達式的操作順序。正例:if (intYear % 4 = 0) & (intYear % 100 != 0) | (intYear % 400 = 0)反例:if (intYear % 4 = 0 & intYear % 100 != 0 | intYear % 400 = 0)c) 避免表達式中的附加功能,不要編寫太復雜的復合表達式。帶附加功能

35、的表達式難于閱讀和維護,它們常常導致錯誤。對于一個好的編譯器,下面兩種情況效果是一樣的。正例 :ariVar1 = ariVar2 + ariVar3;ariVar4+;iResult = ariVar1 + ariVar4;ariVar3+;反例: iResult = (ariVar1 = ariVar2 + ariVar3+) + +ariVar4 ; d) 在switch語句中,每一個case分支必須使用break結(jié)尾,最后一個分支必須是default分支。避免漏掉break語句造成程序錯誤。同時保持程序簡潔。對于多個分支相同處理的情況可以共用一個break,但是要用注釋加以說明。正例:

36、 switch (iMessage) case SPAN_ON: 處理語句 break; case SPAN_OFF: 處理語句 break; default: 處理語句 break; e) 循環(huán)嵌套次數(shù)不大于3次。f) do while語句和while語句僅使用一個條件。保持程序簡潔。如果需要判斷的條件較多,建議用臨時布爾變量先計算是否滿足條件。正例: bool blCondition; do .blCondition = (tApintPortNo.blStateAcpActivity != PASSIVE) | (tApintPortNo.blStateLacpActivity != P

37、ASSIVE) & (abLacpEnabledintPortNo) & (abPortEenabledintPortNo) while (blCondition);g) 如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。下面兩個示例中,反例比正例多執(zhí)行了NUM -1次邏輯判斷。并且由于前者總要進行邏輯判斷,使得編譯器不能對循環(huán)進行優(yōu)化處理,降低了效率。如果NUM非常大,最好采用正例的寫法,可以提高效率。const int NUM = ;正例:if (blCondition)for (i = 0; i NUM; i+) DoSomething(); elsefor (i

38、 = 0; i NUM; i+) DoOtherthing(); 反例: for (i = 0; i NUM; i+)if (blCondition) DoSomething();else DoOtherthing(); h) for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法正例:int arrintScoreNUM;for (i = 0; i NUM; i+) printf(“%dn”,arrintScorei)反例:int arrintScoreNUM;for (i = 0; i = NUM-1; i+) printf(“%dn”,arrintScorei);相比之下,正例的寫法更加

39、直觀,盡管兩者的功能是相同的。8 類和接口8.1 規(guī)則類內(nèi)部的代碼布局順序:數(shù)據(jù)成員、屬性、構(gòu)造函數(shù)、方法。正例:public class SamplePublic:Sample() /構(gòu)造函數(shù)Private: int mProperty1;/數(shù)據(jù)成員public: int GetProperty1 /屬性return mProperty1; Void SetProperty1(int nValue)mProperty1 = nValue;string Operation1(long lngParam1, string strParam2) /方法;8.2 建議a) 功能相關的方法放在一起。如

40、接口中關系較緊密的的幾個方法,類屬性的Get和Set 方法,有調(diào)用關系的方法,重載的方法等有相近或相關的方法盡可能放在一起,方便閱讀。b) 方法的參數(shù)個數(shù)不宜超過4個。過多的函數(shù)參數(shù)會導致性能降低。c) 使程序結(jié)構(gòu)體現(xiàn)程序的目的。正例:return booleanExpression;反例:if (booleanExpression) return true; else return false;d) 保證內(nèi)部類定義成private,提高類的封裝性。e) 嵌套內(nèi)部類不能超過兩層。f) 一個接口可以有多個實現(xiàn)類,實現(xiàn)類共同的變量在接口里聲明。9 附編程實例/*版權所有:版權所有(C) 2004,

41、xx 文件編號:M05_ContXOrderDetail.aspx.cs文件名稱:ContXxxOrderDetail.aspx.cs系統(tǒng)編號:Z系統(tǒng)名稱:經(jīng)營決策支持系統(tǒng)模塊編號:M05模塊名稱:公司銷售統(tǒng)計設計文檔:公司銷售統(tǒng)計設計模型.cat作 者:小張完成日期:2004-7-06 17:29內(nèi)容摘要:該代碼文件的主要功能是通過表格及統(tǒng)計圖顯示總部訂貨數(shù)據(jù)。顯示的信息有考核訂貨額、產(chǎn)品金額、配置成本、名義有效值、毛利。 通過點擊頁面頂部和左邊的菜單來選擇統(tǒng)計方式和數(shù)據(jù)分類方式來獲得所需的統(tǒng)計數(shù)據(jù)。 統(tǒng)計方式有時間事業(yè)部、時間銷售處、時間-銷售處、產(chǎn)品-時間、產(chǎn)品-銷售處、 銷售處-時間、

42、銷售處-產(chǎn)品、事業(yè)部-產(chǎn)品; 分類方式有年度、月份、產(chǎn)品、事業(yè)部。 文件中包含一個類ContXxxOrderDetail,所有功能都是通過該類實現(xiàn)。類中的代碼包括三 個區(qū)段:類變量區(qū)、類屬性區(qū)、類方法區(qū)。 文件調(diào)用:調(diào)用此文件時要傳入Style、Module、Level、QueryCondition、ShowCondition五個參數(shù),在類的Page_Load方法中讀取這些參數(shù)。 01 Style 表示統(tǒng)計方式,值列表如下: 1:時間-產(chǎn)品 2:時間事業(yè)部 3:時間-銷售處 4:產(chǎn)品-時間 5:產(chǎn)品-銷售處 6:銷售處-時間 7:銷售處-產(chǎn)品 8:事業(yè)部-產(chǎn)品 02 Moduel 表示模塊,這

43、里傳入1表示訂貨 03 Level 表示層次,頁頁左邊導航樹第一級為0,第二級為1,第三級為2 04 QueryCondition 表示要使用的查詢條件,此查詢直接是SQL語句中的where 條件 05 ShowCondition 表示要顯示在結(jié)果界面的查詢條件,給用戶的一個提示信息修改記錄1:修 改 人:張三修改日期:2005-9-8修改內(nèi)容:Bug編號:CMMDB(B_員工姓名或ID處可以輸入較長的漢字) 修改提交部分內(nèi)容,加入字符長度判斷。*/using System;using System.Collections;using System.ComponentModel;using S

44、ystem.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using Dundas.Charting.WebControl;/ Dundas的統(tǒng)計圖控件,第三方控件using TEST.dsS.PUB.DATAACEESS;/ 公用的數(shù)據(jù)訪問namespace TEST.DSS.ZB.ORDER/ / 類 編 號:M05_Con

45、tXxxOrderDetail/ 類 名 稱:ContXxxOrderDetail/ 編碼作者:小李/ 完成日期:2005-9-8/ 內(nèi)容摘要:通過表格及統(tǒng)計圖顯示總部銷售統(tǒng)計數(shù)據(jù)。通過點擊上面的菜單選擇統(tǒng)計方式,統(tǒng)計方式有時/ 間事業(yè)部、時間銷售處、時間-銷售處、產(chǎn)品-時間、產(chǎn)品-銷售處、銷售處-時間、銷售處-產(chǎn)品、/ 事業(yè)部-產(chǎn)品; 點擊左邊的樹來選擇具體的內(nèi)容,如具體年度、月份、產(chǎn)品、事業(yè)部等;最后通過/ 表格及統(tǒng)計圖的方式來顯示考核訂貨額、產(chǎn)品金 額、配置成本、名義有效值、毛利。/ public class ContXxxOrderDetail : System.Web.UI.Page#region 類變量區(qū)開始private OraBase MyOrabc;/ 數(shù)據(jù)統(tǒng)計所用的類private DataSet ds;/ 數(shù)據(jù)庫集private DataTable dt;/ 填充到本地的數(shù)據(jù)表private DataTable dtClone;/ 填充到本地的數(shù)據(jù)表private int mPageNo;/ 頁號private int mTheLevel;/ 統(tǒng)計圖層次/ 當前模塊的值,系統(tǒng)對總部訂貨、總部收

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論