Recent Posts

Quy tắc đặt tên và tiêu chuẩn lập trình trong C#

-

Quy ước đặt tên và tiêu chuẩn

1. Quy tắc Pascal: Viết hoa chữ cái đầu tiên của mỗi từ (VD: Student, StudentDetail, ...)
* Sử dụng cho: Phương thức (method), Giao tiếp (Interface), Tập hợp (Enum), Sự kiện (Events), Ngoại lệ (Exception), Không gian tên (NameSpace), Thuộc tính (Property)
2. Quy tắc Camel: Viết thường từ đầu tiên và viết hoa chữ cái đầu tiên của từ kế tiếp (VD: student, studentDetail,...)
* Sử dụng cho: Tầm vực biến (Protected/Private), các Tham số (Parameter)

Sử dụng quy tắc Pascal cho phương thức:
public class HelloWorld{  
  ...  
}  
Sử dụng quy tắc Pascal cho phương thức:
public class HelloWorld{
  void SayHello(string name){
      ...
  }
}
Sử dụng quy tắc Camel cho biến và tham số của phương thức 
public class HelloWorld{
 int totalCount = 0;
 void SayHello(string name){
  string fullMessage = "Hello " + name;
  ...
 }
}
- Không nên sử dụng các tiền tố kèm dấu như: M_ để đặt tên biến, ví dụ như 
       string m_sName;
       int nAge;
Mặc dù khai báo như vậy hợp lệ, nhưng chuẩn viết code .NET không khuyến cáo sử dụng. Tất cả biến nên dùng quy tắc Camel, sử dụng các từ có nghĩa, mô tả được tên biến 

- Không dùng chữ viết tắt, tên, từ địa phương,... mà hãy dùng từ rõ nghĩa như: name, address, phone,...
- Không đặt tên biến một ký tự như: i, x, n,... mà hãy đặt tên biến như index, temp. Ngoại trừ trường hợp sử dụng trong vòng lặp như sau: 
for ( int i = 0; i < count; i++ ){
     ...
}
Nếu biến chỉ được sử dụng để đếm và không sử dụng ở bất kì nơi nào ngoài vòng lặp, nhiều người thích dùng (i) để đặt tên cho biến. 

- Không dùng dấu gạch dưới (_) trong tên biến
Tên NameSpace nên theo chuẩn như sau
<company name="">.<product name="">.<top level="" module="">.<bottom level="" module=""></bottom></top></product></company>

- Tên file nên đặt trùng với tên lớp. Ví dụ: với lớp HelloWorld thì tên file nên là HelloWorld.cs (or HelloWorld.vb)
- Thụt lề: Nên dùng TAB thay về space (phím cách)
- Ghi chú (comment) nên cùng cấp với đoạn mã muốn comment. Cặp dấu ngoặc nhọn ({}) cũng nên cùng cấp với đoạn mã.
Cách ra một dòng để tăng tính rõ ràng của mã
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;
  }
- Với if, if-else, for, while, do-while dù chỉ có một hay nhiều dòng lệnh, cũng nên cho vào trong cặp dấu ngoặc nhọn ({}) 
if ( ... ) {
      // Do something
}
Nguyên tắc viết code:

Để tránh trường hợp file (.cs, .vb) quá lớn.

Nếu một file có hơn 300-400 dòng lệnh, bạn nên nghĩ đến việc chia nhỏ nó vào các Class
Tránh viết các phương thức dài, một phương thức thông thường chỉ nên từ 1-25 dòng lệnh. Nếu một phương thức có hơn 25 dòng lênh, bạn nên chia nhỏ thành các phương thức xử lý riêng. 
Tên phương thức cần rõ ý, nêu được mục đích của phương thức. Nếu bạn đặt tên phương thức rõ ràng, bạn sẽ không cần phải viết tài liệu miêu tả về ý nghĩa của phương thức.
Tốt - Tên phương thức rõ nghĩa 
void SavePhoneNumber ( string phoneNumber )
{
  // Save the phone number.
}
Không tốt - Tên phương thức không rõ nghĩa 
// This method will save the phone number.
void SaveData ( string phoneNumber )
{
  // Save the phone number.
}
Một phương thức chỉ nên xử lý một công việc. Không nên gộp quá nhiều "trách nhiệm" cho một phương thức
Tốt 
 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.
  // ...
 }
Không tốt 
 // 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.
  // ...
 }
Sử dụng kiểu dữ liệu đặc trưng thay vì sử dụng từ lớp
Tốt 
 int age;
 string name;
 object contactInfo;
Không tốt 
 Int16 age;
 String name;
 Object contactInfo;
Nên sử dụng Enum ở bất kì nơi nào cần thiết. Không nên dùng số hay chuỗi để kiểm tra các giá trị
Tốt 
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;
  }
 }
Không tốt 
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;
  }
}
      Nên sử dụng private thay vì public hay protected cho biến. Nếu muốn, hãy dùng properties và thiết lập code để bảo vệ tài nguyên. 
      Không sử dụng được dẫn tĩnh cục bộ trong lập trình ("D:\software\..."). Hãy sử dụng đường dẫn tương đối ("../images/home.jpg")
      Trước khi chương trình hiển thị, hãy kiểm tra lại toàn bộ các yêu cầu về tập tin, ràng buộc, kiểm tra liên kết cơ sở dữ liệu, ... để đảm bảo rằng chương trình sẽ hoạt động tốt
      Nếu phát hiện lỗi phát sinh, nên thông báo cho người dùng biết và "ghi chú" lại để có thể thực hiện các bước kiểm tra và khắc phục lỗi hoặc tạo các bản cập nhật.

Related Post:

  • Code C/C++: Tìm mọi đường đi từ giữa hai đỉnh của đồ thịTìm mọi đường đi từ giữa hai đỉnhMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi từ đỉnh D tới đỉnh C của đồ thị G.Ý tưởng thuật toán: sử dụng kỹ thuật tìm kiếm theo chiều sâu.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: đồ thị liên thông và cho trong tập tin Bai3.inp -  Dòng đầu ghi số n là số đỉnh của một đồ thị (0&l… Read More
  • Code C/C++: Đếm số thành phần liên thông của đồ thịMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy đếm số thành phần liên thông của đồ thị G.Ý tưởng thuật toán:Bước 0: khởi tạo số thành phần liên thông bằng 0.Bước 1: xuất phát từ một đỉnh chưa được đánh dấu của đồ thị. Ta đánh dấu đỉnh xuất phát, tăng số thành phần liên thông lên 1 và chuyển sang bước 2.Bước 2: từ một đỉnh i đã đánh dấu, ta đánh dấu đỉnh j n… Read More
  • Code C/C++: Tìm đường đi Euler của đồ thị (bài toán tìm đường đi)Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi qua tất cả các cạnh mỗi cạnh chỉ qua duy nhất 1 lần.Ý tưởng thuật toán:sử dụng kỹ thuật tìm kiếm theo chiều sâu bằng cách xóa cạnh đã đi qua trong quá trình tìm kiếm đường đi.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: cho trong tập tin Bai5.inp-  Dòng đầu ghi số n là số… Read More
  • Code C/C++: Thuật toán Dijkstra tìm đường đi ngắn nhấtMô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định đường đi ngắn nhất từ đỉnh D tới đỉnh C của đồ thị G.Ý tưởng thuật toán: sử dụng thuật toán Dijkstra.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: đồ thị đã liên thông và cho trong tập tin Bai6.inp. -  Dòng đầu ghi số n là số đỉnh của một đồ thị (0<n<100)-  Dòng thứ hai lưu … Read More
  • Code C/C++: Đường đi Hamilton (bài toán đồ thị)Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi từ đỉnh xuất phát đi qua tất cả các đỉnh mỗi đỉnh chỉ qua duy nhất 1 lần.Ý tưởng thuật toán: sử dụng kỹ thuật tìm kiếm theo chiều sâu bằng cách đánh dấu đỉnh đã đi qua trong quá trình tìm kiếm.Mô tả dữ liệu đầu vào và đầu ra của bài toán:Dữ liệu vào: cho trong tập tin Bai4.inp-  Dòng … Read More
  • Code C/C++: Thuật toán Prim tìm cây bao trùm tối thiểuMô tả bài toán: cho đồ thị vô hướng có trọng số G=(V,E) hãy tìm đường đi sao cho tất cả các đỉnh điều có đường đi với nhau và tổng trọng số của đường đi là nhỏ nhất.Ý tưởng thuật toán:Bước 1: xuất phát từ đỉnh k bất kỳ (thông thường chọn đỉnh đầu tiên) chọn một cạnh có trọng số nhỏ nhất liền kề với đỉnh k (min{A[k][j]}j=1..n) ta đánh dấu 2 đỉnh đi qua c… Read More




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@