C++、Java與C#的命名規範總結
序言
由於在開發工作中經常用到C++、Java和C#作為開發語言,命名規範的問題經常給我造成一些困擾。一方面命名規範沒有唯一的標準答案,另一方面,雖說語言的命名規範並沒有固定的形式,三種語言的風格畢竟不太一樣,也各自有著一些獨特的特點。在編寫代碼的過程中所採用的命名方式經常變動,沒有形成固定的風格。因此,根據從網上收集到的一些資料以及自身的一些經驗,對C++、Java以及C#的命名規範進行了總結,方便以後查詢。
命名規範的原則:
l 盡量採用以前採用過的命名規則;
l 盡量在三種語言下採用相同的命名規則,以方便記憶;
l 盡量採用來自官方(如Sun、MS)的命名規則。
1. 匈牙利命名法、Camel命名法與Pascal命名法
匈牙利命名法:在Windows編程中使用非常普遍,由微軟的一位匈牙利程式員提出。匈牙利命名法通過在變數名前面加上相應的小寫字母的符號標識作為首碼,標識出變數的範圍、類型等。例如,m_lpszStr表示指向一個以0字元結尾的字串的長指標成員變數。在物件導向的程式設計中匈牙利命名法使用起來非常彆扭。
Camel命名法:即駱駝式命名法,原因是採用該命名法的名稱看起來就像駱駝的駝峰一樣高低起伏。Camel命名法有兩種形式:混合使用大小寫字母和單詞之間加底線,例如runFast和run_fast都屬於Camel命名法。
Pascal命名法:與Camel命名法類似,不過Pascal命名法的首字母為大寫字母。
2. 命名規範對照表
標識符類型
C++
Java
C#
檔案名稱
與類名相同,定義類是檔案名稱一般成對出現,如FooBar.h和FooBar.cpp對應類FooBar。
與類名相同。
同Java。
名字空間、包
同C#。
包名的首碼是全部小寫ASII字元並且是一個頂級網域名稱,通常是com,edu,gov,net,org。包名的後續部分根據不同機構各自內部的命名規範不盡相同,這類命名規範可能以特定目錄名的組成來區分部門、項目、機器或註冊名。
樣本:
l com.sun.eng
l com.apple.quicktime.v2
l edu.cmu.cs.bovik.cheese
Pascal命名法,且從表示範圍大的名字開始。
樣本:
l Oracle.Data.Access;
l Microsoft.Office.Excel;
枚舉值
Pascal命名法,枚舉值前面加上枚舉類型名,中間以底線“_”隔開。
樣本:
l enum Color{Color_Red, Color_Green};
Pascal命名法。
樣本:
l enum Color{Red, Green};
同Java。
類、結構體、類型定義(typedef)、枚舉類型
同Java。
Pascal命名法。
樣本:
l class Raster;
l class ImageSprite;
同Java。
介面
與類型命名規範相同。
命名規則與類名相似。
樣本:
l interface RasterDelegate;
l interface Storing;
Pascal命名法,前面需要加上字元“I”。
樣本:
l interface ITester;
l interface ILogger;
方法
同C#。
Camel命名法。
樣本:
l run();
l runFast();
l getBackGround();
Pascal命名法。
樣本:
l Run();
l RunFast();
l GetBackGround();
方法內的變數及參數
同Java。
Camel命名法。
樣本:
l int myWidth;
l int taxTotal;
同Java。
私人、保護執行個體欄位
同Java。
Camel命名法,前面需要加一個底線“_”。
樣本:
l int _employeeId;
l String _name;
l Customer _customer;
同Java。
屬性、存取函數
Pascal命名法,讀取函數前面加上“Get”,設定函數前面加上“Set”。
樣本:
l GetEmployeeId();
l SetName();
l GetCustomer();
Camel命名法,讀取函數前面加上“get”,設定函數前面加上“set”。
樣本:
l getEmployeeId();
l setName();
l getCustomer();
與方法命名規則相同,應該與欄位名稱相同。建議採用自動屬性。
樣本:
常量
同Java。
全部大寫,單詞間用底線隔開。
樣本:
l static final int MIN_WIDTH = 4;
l static final int MAX_WIDTH = 999;
l static final int GET_THE_CPU = 1;
同Java。
事件
無
無
Pascal命名法。
樣本:
l FormClosing;
l ValueChanged;
l ButtonClicked;
異常類型
繼承自std::exception,與類型命名規則相同,且以Exception結尾。
繼承自java.lang.Exception,與類型命名規則相同,且以Exception結尾。
繼承自System.Exception,與類型命名規則相同,且以Exception結尾。
參考資料
Google C++編程風格指南:http://www.cppblog.com/Fox/category/6273.html?Show=All
Java語言編碼規範:http://huihoo.org/code/java_code_conventions.html
.Net Framework開發人員指南——名稱準則:http://msdn.microsoft.com/zh-cn/library/ms229002(VS.80).aspx
C#命名規則、開發習慣和風格:http://www.cnblogs.com/netshuai/archive/2008/06/29/1231934.html