隨着編程工做的深刻,我深入的體會到,最浪費程序員時間的不只僅是BUG,還有取名。程序員
每次新建一個類,一個變量,一個函數,都tm的要想半天到底取什麼名字,真的是好浪費時間。編程
因此爲了跟別的妖豔賤貨不同,我正打算把經常使用的命名記錄下來,並整理編程的命名原則和命名規範,函數
整理出來貼在個人博客並置頂,我以爲這樣會大大節省個人編程時間,提升編程效率。工具
直到有一天,我能熟練的掌握相關規範,不會再因取名字而糾結,就取消置頂。開發工具
1、共性規則spa
1>「匈牙利」命名法:在變量和函數名中加入前綴以增進人們對程序的理解;
操作系統
eg:code
class CStude;orm
int nCount;對象
int* pCount;
2>標識符應當直觀且能夠拼讀,可望文知意,沒必要進行「解碼」。
標識符最好採用英文單詞或其組合,便於記憶和閱讀。切忌使用漢語拼音來命名。
程序中的英文單詞通常不會太複雜,用詞應當準確。例如不要把CurrentValue寫成NowValue。
3>標識符的長度應當符合「min-length && max-information」原則。
幾十年前老ANSI C規定名字不許超過6個字符,現今的C++/C再也不有此限制。通常來講,長名字能
更好地表達含義,因此函數名、變量名、類名長達十幾個字符不足爲怪。那麼名字是否越長約好?
不見得! 例如變量名maxval就比maxValueUntilOverflow好用。單字符的名字也是有用的,常見的
如i,j,k,m,n,x,y,z等,它們一般可用做函數內的局部變量。
4>命名規則儘可能與所採用的操做系統或開發工具的風格保持一致。
例如Windows應用程序的標識符一般採用「大小寫」混排的方式,如AddChild。而Unix應用程序的標
識符一般採用「小寫加下劃線」的方式,如add_child。別把這兩類風格混在一塊兒用。
5>程序中不要出現僅靠大小寫區分的類似的標識符。
eg:
nt x, X; // 變量x 與 X 容易混淆
void foo(int x); // 函數foo 與FOO容易混淆
void FOO(float x);
6>程序中不要出現標識符徹底相同的局部變量和全局變量,儘管二者的做用域不一樣而不會發生語法錯誤,但會令人誤解。
7>變量的名字應當使用「名詞」或者「形容詞+名詞」。
eg:
float value;
float oldValue;
float newValue;
8>全局函數的名字應當使用「動詞」或者「動詞+名詞」(動賓詞組)。類的成員函數應當只使用「動詞」,被省略掉的名詞就是對象自己。
eg:
DrawBox(); // 全局函數
box->Draw(); // 類的成員函數
9>用正確的反義詞組命名具備互斥意義的變量或相反動做的函數等。
eg:
int minValue;
int maxValue;
int SetValue(…);
int GetValue(…);
10>儘可能避免名字中出現數字編號,如Value1,Value2等,除非邏輯上的確須要編號。這是爲了防止程序員
偷懶,不願爲命名動腦筋而致使產生無心義的名字(由於用數字編號最省事)。
2、簡單的Windows應用程序命名規則
1>類名和函數名用大寫字母開頭的單詞組合而成。
eg:
class Node; // 類名
class LeafNode; // 類名
void Draw(void); // 函數名
void SetValue(int value); // 函數名
2>變量和參數用小寫字母開頭的單詞組合而成。
eg:
bool flag;
int drawMode;
3>常量全用大寫的字母,用下劃線分割單詞。
eg:
const int MAX = 100;
const int MAX_LENGTH = 100;
4>類的數據成員加前綴m_(表示member),這樣能夠避免數據成員與成員函數的參數同名。
eg:
void Object::SetValue(int width, int height)
{
m_width = width;
m_height = height;
}
5>爲了防止某一軟件庫中的一些標識符和其它軟件庫中的衝突,能夠爲各類標識符加上能反映軟件性
質的前綴。例如三維圖形標準OpenGL的全部庫函數均以gl開頭,全部常量(或宏定義)均以GL開頭。
3、經常使用的命名單詞
這裏是我這三個月的編程中所積累到的經常使用的單詞;其實有了這些,再加上以前的命名規範,命名就會變的如此簡單
getInstance //得到實例 upData //數據更新 onRender //渲染 init... //初始化... set... //設置/更改 loadFile //裝載文件 add..by.. //添加... moveDown //移動 backup //備份 revert //恢復 count //計數 londFile //讀取文件 Birth //初始 Vaule //值 index //索引 create... //建立 Entity //(父類用) Monster //怪物 Scene //場景 Node //節點 director //主管 stance //立場 select //挑選 refresh //更新、使.....恢復 Global //全局、全球 Register //註冊 Controller //控制器
俗話說的好,沒有一種命名規則可讓全部的程序員贊同。命名規則對軟件產品而言並非「成敗悠關」的事,
咱們不要化太多精力試圖發明世界上最好的命名規則,我今天整理的命名規則只是一種參考,跟我的有關。