誰都會寫代碼!幾個月的編程經驗可以讓你寫出“可運行應用程序”。讓它可運行容易,但是以最有效率的方式編碼就需要下更多的功夫!
要知道,大多數程序員在寫”可運行代碼,“而不是”高效代碼“。我們在這個指南課程前面提到,你想成為你們公司”最尊貴的專業人員“嗎?寫”高效代碼“是一項藝術,你必須學習和實踐它。
命名慣例和規范
注記 :
Pascal 大小寫形式-所有單詞第一個字母大寫,其他字母小寫。
Camel 大小寫形式-除了第一個單詞,所有單詞第一個字母大寫,其他字母小寫。
類名使用Pascal 大小寫形式
public class HelloWorld
{
...
}
方法使用Pascal 大小寫形式
public class HelloWorld
{
void SayHello(string name)
{
...
}
}
變量和方法參數使用Camel 大小寫形式
public class HelloWorld
{
int totalCount = 0;
void SayHello(string name)
{
string fullMessage = "Hello " + name;
...
}
}
不要使用匈牙利方法來命名變量
以前,多數程序員喜歡它-把數據類型作為變量名的前綴而m_作為成員變量的前綴。例如:
string m_sName;
int nAge;
然而,這種方式在.NET編碼規范中是不推薦的。所有變量都用camel 大小寫形式,而不是用數據類型和m_來作前綴。
用有意義的,描述性的詞語來命名變量
- 別用縮寫。用name, address, salary等代替 nam, addr, sal
- 別使用單個字母的變量象i, n, x 等. 使用 index, temp等
用於循環迭代的變量例外:
for ( int i = 0; i < count; i++ )
{
...
}
如果變量只用於迭代計數,沒有在循環的其他地方出現,許多人還是喜歡用單個字母的變量(i) ,而不是另外取名。
- 變量名中不使用下劃線 (_) 。
- 命名空間需按照標准的模式命名
...
文件名要和類名匹配
例如,對於類HelloWorld, 相應的文件名應為 helloworld.cs (或, helloworld.vb)
縮進和間隔
縮進用 TAB . 不用 SPACES.。
注釋需和代碼對齊.。
花括弧 ( {} ) 需和括號外的代碼對齊.。
用一個空行來分開代碼的邏輯分組。.
bool SayHello (string name)
{
string fullMessage = "Hello " + name;
DateTime currentTime = DateTime.Now;
string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
MessageBox.Show ( message );
if ( ... )
{
// Do something
// ...
return false;
}
return true;
}
這段代碼看起來比上面的好::
bool SayHello ( string name )
{
DateTime currentTime = DateTime.Now;
string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
MessageBox.Show ( message );
if ( ... )
{
// Do something
// ...
return false;
}
return true;
}
在一個類中,各個方法需用一空行,也只能是一行分開。
花括弧需獨立一行,而不象if, for 等可以跟括號在同一行。.
好:
if ( ... )
{
// Do something
}
不好:
if ( ... ) {
// Do something
}
在每個運算符和括號的前後都空一格。.
好:
if ( showResult == true )
{
for ( int i = 0; i < 10; i++ )
{
//
}
}
不好:
if(showResult==true)
{
for(int i= 0;i<10;i++)
{
//
}
}
良好的編程習慣
遵從以下良好的習慣以寫出好程序
避免使用大文件。如果一個文件裡的代碼超過300~400行,必須考慮將代碼分開到不同類中。
避免寫太長的方法。一個典型的方法代碼在1~25行之間。如果一個方法發代碼超過25行,應該考慮將其分解為不同的方法。
方法名需能看出它作什麼。別使用會引起誤解的名字。如果名字一目了然,就無需用文檔來解釋方法的功能了。
好:
void SavePhoneNumber ( string phoneNumber )
{
// Save the phone number.
}
不好:
// This method will save the phone number.
void SaveData ( string phoneNumber )
{
// Save the phone number.
}
一個方法只完成一個任務。不要把多個任務組合到一個方法中,即使那些任務非常小。
好:
// Save the address.
SaveAddress ( address );
// Send an email to the supervisor to inform that the address is updated.
SendEmail ( address, email );
void SaveAddress ( string address )
{
// Save the address.
// ...
}
void SendEmail ( string address, string email )
{
// Send an email to inform the supervisor that the address is changed.
// ...
}
不好:
// Save address and send an email to the supervisor to inform that the address is updated.
SaveAddress ( address, email );
void SaveAddress ( string address, string email )
{
// Job 1.
// Save the address.
// ...
// Job 2.
// Send an email to inform the supervisor that the address is changed.
// ...
}
使用C# 或 VB.NET的特有類型,而不是System命名空間中定義的別名類型。
好:
int age;
string name;
object contactInfo;
不好:
Int16 age;
String name;
Object contactInfo;
別在程序中使用固定數值,用常量代替。
別用字符串常數。用資源文件。
避免使用很多成員變量。聲明局部變量,並傳遞給方法。不要在方法間共享成員變量。如果在幾個方法間共享一個成員變量,那就很難知道是哪個方法在什麼時候修改了它的值。
必要時使用enum 。別用數字或字符串來指示離散值。
好:
enum MailType
{
Html,
PlainText,
Attachment
}
void SendMail (string message, MailType mailType)
{
switch ( mailType )
{
case MailType.Html:
// Do something
break;
case MailType.PlainText:
// Do something
break;
case MailType.Attachment:
// Do something
break;
default:
// Do something
break;
}
}
不好:
void SendMail (string message, string mailType)
{
switch ( mailType )
{
case "Html":
// Do something
break;
case "PlainText":
// Do something
break;
case "Attachment":
// Do something
break;
default:
// Do something
break;
}
}
別把成員變量聲明為 public 或 protected。都聲明為 private 而使用 public/protected 的Properties.
不在代碼中使用具體的路徑和驅動器名。 使用相對路徑,並使路徑可編程。
永遠別設想你的代碼是在“C:”盤運行。你不會知道,一些用戶在網絡或“Z:”盤運行程序。
應用程序啟動時作些“自檢”並確保所需文件和附件在指定的位置。必要時檢查數據庫連接。出現任何問題給用戶一個友好的提示。
如果需要的配置文件找不到,應用程序需能自己創建使用默認值的一份。
如果在配置文件中發現錯誤值,應用程序要拋出錯誤,給出提示消息告訴用戶正確值。
錯誤消息需能幫助用戶解決問題。永遠別用象"應用程序出錯", "發現一個錯誤" 等錯誤消息。而應給出象 "更新數據庫失敗。請確保登陸id和密碼正確。" 的具體消息。
顯示錯誤消息時,除了說哪裡錯了,還應提示用戶如何解決問題。不要用 象 "更新數據庫失敗。"這樣的,要提示用戶怎麼做:"更新數據庫失敗。請確保登陸id和密碼正確。"
顯示給用戶的消息要簡短而友好。但要把所有可能的信息都記錄下來,以助診斷問題。
注釋
別每行代碼,每個聲明的變量都做注釋。
在需要的地方注釋。可讀性強的代碼需要很少的注釋。如果所有的變量和方法的命名都很有意義,會使代碼可讀性很強並無需太多注釋。
行數不多的注釋會使代碼看起來優雅。但如果代碼不清晰,可