在編程過程中,我們隨處都要進行命名。給變量,函數,參數,類,常量,類型,宏,包等。
命名一定要規範,良好的命名規範可以增強代碼的可讀性,易於他人和自己後期對代碼的理解與維護。不規範的命名,甚至錯誤的命名,會增加他人理解代碼的成本,甚至引起他人包括自己對代碼的誤解。自己就曾經有同事把“delegate”單詞錯拼成了“delete”從而導致另外一名同事糾結了一個下午。
怎麼做到良好的命名規範:
1 命名要“名副其實”:
要做到通過名字,就知道變量爲什麼存在,在做什麼事情。一旦發現更好的更合適的命名,不要猶豫,馬上更換。如果一個命名需要用註釋進行補充說明,表明這個命名不算“名副其實”。
比如:
int i; //用來循環數組的下標索引
哪怕加了註釋,依然是很不好的命名,在其他位置遇到i,會很困惑,甚至可能需要跳到這裏看註釋,增加了代碼“模糊度”。
2 命名要“避免誤導”
千萬不要把“英語差”作爲糟糕代碼的擋箭牌,要知道寫代碼不僅僅是給自己看的,也是給其他人看的。
要做的命名單詞無拼寫錯誤。一定要做到。
不要佔用系統已有的專有詞彙命名。每種編程語言,都會警告大家,不要這樣做,甚至最好不要讓這些專業詞彙輕易出現在自己的命名中。
避免詞彙外形誤導,比如l(小寫的L字母)和1(阿拉伯數字1),o(小寫字母O)和0 (阿拉伯數字0)
3 作出“有意義的區分”
比如定義一個函數拷貝字符串
void copyString(char str1[], char str2[]);
str1和str2簡單使用數字命名的方式,在這個方法中就顯得很有誤導性,讓人看了分不清str1和str2的區別,誰是被拷貝的字符串,誰是拷貝以後的字符串。
如果改成source和destination進行區分,就會一下子明朗很多
void copyString(char source[], char destination[]);
假如一個項目定義了下面一些類
class Product;
class ProductData;
class ProductInfo;
info,data,a,the,an,在某些地方是意義含混的廢話。
variable不該出現在變量名中,Table不該出現在表名中,nameString不見得比name清晰多少。
4 儘量使名字“讀得出來”
OC剛出來的時候,被稱作一門很“優雅”的語言,其中有個特點,讀OC的官方代碼,函數的名字就是一句話,寫代碼如同寫作文。
不要用自創的單詞和語句。
5 多使用“可搜索的名字”
面對數字常量,多使用宏或者枚舉定義,不要直接在代碼中使用數字。數字是很難看出含義的,後期維護很麻煩。
6 前綴的區分
很多時候,項目需要引入第三方庫,需要和第三方公司合作;保持類名,包名的特殊性,能夠避免命名衝突。