集中精力寫出定義清晰、文檔完備、行為良好的類和函數,會使代碼易于使用和維護。
原則1: 重復使用的代碼用函數替代
?例子
int main (int argc,char*azEv[])
{
if (argc<l )
{
cerr<<"Usage: "<<argv[0]<< "〈filename〉"<<endl; // 重復使用的代碼
exit(1);
}
//...
if (wantHelp)
{
cerr<<"Usage: "<<argv[0]<< "〈filename〉"<<endl; // 重復使用的代碼
}
//...
}
原則2: 一定要做到先聲明后使用
?說明
C++必須這樣做(否則編譯通不過)。C程序沒有強制要求,但也建議先提供原型,再使用函數。
原則3: 函數原型聲明放在一個頭文件中
原則4: 函數無參數一定要用void標注
?例子
int foo (void); // 比“int foo();”好
原則5: 避免函數的參數過多
?定量分析的參考
一個函數的參數應該限制在5個以內。
原則6: 盡量保持函數只有唯一出口
原則7: 顯式定義返回類型
?例子
// 隱含的返回類型是整型,不好
Password_T::length (void);
// 顯式聲明,好
int Password_T::length (void);
原則8: (非void)任何情況都要有返回值
?說明
任何非void函數在任何情況下都要返回某個值。
?例子
int valueGet (int const*pValue)
{
if (pValue !=NULL)
{
return *pValue;
}
} // else時會返回什么
原則9: 返回指針類型的函數應該用NULL表示失敗
?例子
int* MyFunction (void)
{
// ...
if ("something wrong") // 如果遇到問題,函數需要失敗返回
{
return NULL; // 返回NULL表示失敗
}
}
//…
int*pCount=myFunction();
if (pCount !=NULL) // 現在有辦法知道函數是否成功
//...
原則10: 類的成員變量應該盡量定義成私有,通過屬性來訪問。
原則11: 類的構造函數,它應該用遞增的方式寫(比如:參數多的寫在后面)。
原則12: 無論如何,每一個類都應該定義 toString 方法:
?例子
public String toString()
{
String retval = "CounterSet: ";
…………..
return retval;
}
- 第一章 概述
- 1.1規范制定原則
- 1.2 術語定義
- 1.3 文件命名組織
- 1.3.1文件命名
- 1.3.2文件注釋
- 第二章 編碼風格
- 第三章 注釋
- 3.1 注釋概述
- 3.2 文檔型注釋
- 3.3 類c注釋
- 3.4 單行注釋
- 3.5 注釋標簽
- 第四章 聲明
- 4.1每行聲明數
- 4.2初始化
- 4.3位置
- 4.4類和接口的聲明
- 4.5字段的聲明
- 第五章 命名規范
- 5.1命名概述
- 5.2大小寫規則
- 5.3縮寫
- 5.4命名空間
- 5.5類
- 5.6接口
- 5.7屬性 (Attribute)
- 5.8枚舉 (Enum)
- 5.9參數
- 5.10方法
- 5.11屬性 (property)
- 5.12事件
- 5.13 常量 (const)
- 5.14 字段
- 5.15 靜態字段
- 5.16 集合
- 5.17 措詞
- 第六章 語句
- 6.1每行一個語句
- 6.2 復合語句
- 6.3 return 語句
- 6.4 if、 if-else、if else-if 語句
- 6.5 for、foreach 語句
- 6.6 while 語句
- 6.7 do - while 語句
- 6.8 switch - case 語句
- 6.9 try - catch 語句
- 6.10 using 塊語句
- 6.11 goto 語句
- 第七章 函數與類
- 第八章 內存分配和釋放
- 第九章 兼容性
- 第十章 控件命名規則
- 10.1 命名方法
- 10.2 主要控件名簡寫對照表
- 附錄一: 匈牙利命名法