coding standard (chuẩn mã nguồn)
TRANSCRIPT
LOGO
“ Add your company slogan ”
Chuẩn mã nguồn
Eric Lee
TOPIC:
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
www.themegallery.com
1. Chuẩn mã nguồn là gì?
Là một bộ luật quy định cách viết code của một chương trình mà các lập trình viên bắt buộc phải tuân theo khi tham gia phát triển chương trình đó.
Đặt tên lớp, thuộc tính, phương thức,… Khoảng trắng. Khai báo và sử dụng biến. Comment trong mã nguồn. …
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
www.themegallery.com
2. Tầm quan trọng của chuẩn mã nguồn
Dễ bảo trì, sửa lỗi.
public void InsertionSort( int[] data, int firstElement, int lastElement ) {int lowerBoundary = data[ firstElement-1 ]; data[ firstElement-1 ] = SORT_MIN for ( int sortBoundary = firstElement+1; sortBoundary <= lastElement; sortBoundary++ ) { int insertVal = data[ sortBoundary ]; int insertPos = sortBoundary; while ( insertVal < data[ insertPos-1 ] ) { data[ insertPos ] = data[ insertPos-1 ]; insertPos = insertPos-1; } data[ insertPos ] = insertVal; } data[ firstElement-1 ] = lowerBoundary; }
Bạn là một debugger xuất sắcCó người nhờ bạn sửa lỗi chương trình giúp họ
www.themegallery.com
2. Tầm quan trọng của chuẩn mã nguồn
Dễ bảo trì, sửa lỗi.public void InsertionSort( int[] data, int firstElement, int lastElement ) {
int lowerBoundary = data[ firstElement-1 ];data[ firstElement-1 ] = SORT_MIN;
for ( int sortBoundary = firstElement + 1; sortBoundary <= lastElement; sortBoundary++ ) {
int insertVal = data[ sortBoundary ];int insertPos = sortBoundary;
while ( insertVal < data[ insertPos - 1 ] ) {data[ insertPos ] = data[ insertPos - 1 ];insertPos = insertPos - 1;
} data[ insertPos ] = insertVal;
}
data[ firstElement - 1 ] = lowerBoundary;}
www.themegallery.com
2. Tầm quan trọng của chuẩn mã nguồn
Để người khác hiểu được mã nguồn của mìnhpublic int F( int n) {
if (n == 0) {return 0;
}
if (n == 1) {return 1;
}
int x = 0;int y = 1;int z;
for (int i = 2; i <= n; i++) {z = x + y;x = y;y = z;
}
return z;}
www.themegallery.com
2. Tầm quan trọng của chuẩn mã nguồn
Để người khác hiểu được mã nguồn của mìnhpublic int TinhSoFibonacy (int n) {
if (n == 0) {return 0; //n = 0 thì f(n) = 0
} if (n == 1) {
return 1; //n = 1 thì f(n) = 1
}//n >= 2 thì f(n) = f(n – 1) + f(n – 2)int fBeforeBefore = 0;int fBefore = 1;int f;
for (int i = 2; i <= n; i++) {f = fBefore + fBeforeBefore;fBeforeBefore = fBefore;fBefore = f;
}
return f;}
www.themegallery.com
2. Tầm quan trọng của chuẩn mã nguồn
Thống nhất code giữa các thành viên trong nhómClass NhanVien {
string _maNhanVien;string _hoTen;Date _ngaySinh;
doule luong;double phuCap;
string P_tinhTrangHonNhan;
public int TinhTuoi(){…}pubic double tinhLuongCuoiThang(){…}
}
Bạn được yêu cầu phát triển tiếp class này
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
www.themegallery.com
3. Chuẩn hình thức và chuẩn ngữ nghĩa
Chuẩn hình thức
Là những quy định liên quan đến sự định dạng của mã nguồn
Thụt đầu dòng
Sử dụng khoảng trắng
Đóng ngoặc, mở ngoặc
Đặt tên lớp, thuộc tính, phương thức
…
www.themegallery.com
3. Chuẩn hình thức và chuẩn ngữ nghĩa
Chuẩn ngữ nghĩa
Là những quy định liên quan đến sự thực thi của mã nguồn
Biểu thức so sánh
Cấu trúc điều khiển : if, for, while
Khai báo và sử dụng biến
Cài đặt phương thức
…
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
GNU coding standards
Tác giả: Richard Stallman
Phiên bản đầu tiên phát hành vào năm 1987 bởi Free Software Foundation, Inc.
Lần cập nhật gần nhất 12/1/2012.
Ngôn ngữ hỗ trợ : C(chủ yếu), C++, Pascal
Sử dụng nhiều khi phát triển các thống triển khai trên các hệ điều hành Linux, Unix,…
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
Code Conventions for the Java Programming Language
Tác giả: Sun Microsystems
Phiên bản đầu tiên phát hành vào năm 1991.
Lần cập nhật gần nhất vào 20/4/1999
Ngôn ngữ hỗ trợ chính: Java
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
Philips Healthcare - C# Coding Standard
Tác giả: Philips Healthcare
Phiên bản mới nhất 2.0 phát hành năm 1999.
Ngôn ngữ hỗ trợ chính: C#
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space
Nhữngquyđịnhvềsửdụngkhoảngtrắng(space),thụtđầudòng,xuốngdòng,dòngtrống.Giúpchonộidungvănbảnđượctổchứcmộtcáchcóhệthốngđểdễngườiđọcdễdàngtiếpthu.
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space
Những quy định về sử dụng khoảng trắng (space), thụt đầu dòng, xuống dòng, dòng trống.
Giúp cho nội dung văn bản được tổ chức một cách có hệ thống để người đọc dễ dàng tiếp thu.
dùng white space khi viết mã nguồn?
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space – thụt đầu dòngXác định một chuẩn thụt đầu dòng cho toàn bộ mã nguồn của chương trình.
1 đơn vị thụt đầu dòng = 1 tab(*)
Hoặc, 1 đơn vị thụt đầu dòng = 5 khoảng trắng
Dòng code thứ 20 dùng 2 đơn vị thụt đầu dòng nghĩa là bấm tab 2 lần(*)
Nên dùng tab thay cho khoảng trắng Đỡ tốn công nhập quá nhiều lần khoảng trắng
Có thể tùy chỉnh một đơn vị tab ứng với bao nhiêu khoảng trắng tùy ý
Hai dòng code cách nhau một bậc thì sẽ cách nhau một đơn vị thụt đầu dòng.
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space – thụt đầu dòng
int Main(int argc, char *argv[]) {
while(x == y){
DoSomeThing();DoSomeThingElse();if (hasError) {
FixError();}
}}
int Main(int argc, char *argv[]) {while(x == y){
DoSomeThing();DoSomeThingElse();
if (hasError) {
FixError();}
}}
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space – Dòng trống
Những dòng code có quan hệ với nhau (cùng thực hiện một công việc) thì gom lại thành một block
Nghĩa là không có dòng trống giữa các đoạn code như trên
Hai block code thì cách nhau ít nhất một dòng trống
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space – dòng trống
//do somethingstring connectionString = ReadConnectionString();SqlConnection conn = new SqlConnection(connectionString);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "SELECT * FROM Customer;";conn.Open();//so something else
www.themegallery.com
4. Một số chuẩn mã nguồn thông dụng
White Space – dòng trống
//do somethingstring connectionString = ReadConnectionString();SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "SELECT * FROM Customer;";
conn.Open();//so something else
4. Một số chuẩn mã nguồn thông dụng
White Space – inter-term spacingĐặt khoảng trắng sau dấu phẩy và dấu chấm phẩy
TestMethod(a, b, c)
TestMethod(a,b,c)
Đặt khoảng trắng xung quanh các toán tử
a=b;for(int i=0;i<10;i++)
a = b;for(int i = 0 ; i < 10; i++)
4. Một số chuẩn mã nguồn thông dụng
Ngoặc tròn
12 + ((100 % 3) * 7) / 8)
C++ version: 12 + 100 % 3 * 7 / 8 = ?
Dùng dấu ngoặc tròn để Người đọc hiểu rõ mục đích của bạn Chắc chắn là trình biên dịch sẽ thực hiện đúng theo ý của bạn
Hãy quyết định dùng dấu ngoặc tròn khi bạn đang phân vân là có nên dùng dấu ngoặc tròn hay không.
12 + ((100 % (3 * 7)) / 8)
4. Một số chuẩn mã nguồn thông dụng
Dấu {} ( theo chuẩn C# )Dấu “{” phải được đặt ở dòng mới, không được đặt cùng dòng với các câu if, for, while,…
public class MyClass {
TTheTestEnum FTestVar;
void DoSomething() { if (FTestVar == 10) { //...do something } else { //...do something else } } }
4. Một số chuẩn mã nguồn thông dụng
Dấu {} ( theo chuẩn C# )Dấu “{” phải được đặt ở dòng mới, không được đặt cùng dòng với các câu if, for, while,…
public class TTestMeClass { TTheTestEnum FTestVar;
void DoSomething() { if (FTestVar == 10) { //...do something } else { //...do something else } } }
4. Một số chuẩn mã nguồn thông dụng
CommentKhông viết các comment chỉ lặp codeint sum = 0;//Lặp từ 0 đến 100for (int i = 0; i < 100; i++){
//Mỗi lần lặp cộng giá trị sum cho 2 sum = sum + 2;
}
Các comment trên đơn giản chỉ lặp code, chứ không cung cấp thêm thông tin gì cho người đọc.
Làm code dài hơn. Người đọc tốn thời gian đọc nhiều hơn.
4. Một số chuẩn mã nguồn thông dụng
CommentViết các comment không cầu kì; càng đơn giản càng tốt
4. Một số chuẩn mã nguồn thông dụng
CommentViết các comment không cầu kì; càng đơn giản càng tốt
4. Một số chuẩn mã nguồn thông dụng
CommentKhi dùng nhiều endline comment trên các dòng code liên tiếp nhau thì các comment này phải được canh lề như nhau
4. Một số chuẩn mã nguồn thông dụng
CommentKhi dùng nhiều endline comment trên các dòng code liên tiếp nhau thì các comment này phải được canh lề như nhau
4. Một số chuẩn mã nguồn thông dụng
Comment
Một số lưu ý khác về comment
Nên vừa code vừa viết comment. Tránh trường hợp viết code xong rồi mới viết comment
Không nên đụng chỗ nào cũng comment, chỉ viết comment khi bạn cảm nhận là đoạn code của mình quá phức tạp.
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênQuy tắc viết hoa
Pascal case• Các chữ cái đầu mỗi từ được viết hoa.
• Các chữ còn lại được viết thường.
MyName, PathSource
Camel case• Giống với Pascal case nhưng chữ cái đầu của từ đầu tiên viết
thường
myName, pathSource
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênClass Sử dụng danh từ hay cụm danh từ : NhanVien, FormDangNhap,… Dùng Pascal case : NhanVien, FormDangNhap,… Hạn chế viết tắt gây khó hiểu :
Sai: MyRect Đúng: MyRectangle
Không dùng tiền tố khi đặt tên lớp
Sai : CFileStream Đúng : FileStream
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênInterface
Giống như đặt tên class nhưng có thêm tiền tố I
IComponent
ICustomAttributeProvider
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênPhương thức Pascal Case
TinhLuong
Tên phương thức thể hiện được chức năng của phương thức đóTimSoNguyenToLonNhat, DemSoChan
Tránh đặt tên gây cảm giác mơ hồ, không rõ nghĩaXuatKetQua, SapXep
Không phân biệt tên các phương thức bằng sốTinhLuongNhanVien1, TinhLuongNhanVien2, TinhLuongNhanVien3
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênBiến Camel Case
ngaySinh, ngayGiaoHang,…
Không dùng tiền tố
string strHoTen, bool bFlag,…
Tên biến gợi nhớ, tránh viết tắt gây khó hiểu• Đúng
String address
• Sai
String addr
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênBiến(tt) Không đặt tên biến chỉ bằng 1 chữ cái như x, y , z,… trừ trường hợp các
biến đếm i, j, k
Không nên đặt tên biến quá dài, hay quá ngắn vì có thể làm rối chương trình hoặc cũng dẫn đến ý nghĩa biến mơ hồ(quá ngắn)
4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tênBiến(tt)
Nếu biến làm thuộc tính của một class thì thêm tiền tố “_” nhằm phân biệt với các biến cục bộ
_maSoSinhVien, _chieuDai, _chieuRong
4. Một số chuẩn mã nguồn thông dụng
Viết một phương thức hiệu quả Khi một đoạn code xuất hiện ở nhiều nơi trong chương trình ta gom các
đoạn code đó thành một phương thức
Tiết kiệm thời gian bảo trì, sửa lỗi
Khi trong một phương thức có các đoạn code xử lý phức tạp thì ta nên tách đoạn code phức tạp đó ra thành một phương thức riêng biệt
Dễ dàng theo dõi, debug
Khai báo tham số truyền vào vừa đủ, tránh tình trạng khai báo tham số truyền vào nhưng không sử dụng
4. Một số chuẩn mã nguồn thông dụng
Viết một phương thức hiệu quả(tt)Mỗi phương thức chỉ thực hiện một chức năngvoid SapXepVaXuatRaConsole(int a[], int n){
//code sap xep mang//code xuat ra console
}
Yêu cầu mới :Cho một mảng hãy sắp xếp và xuất kết quả ra fileGiải pháp: Viết thêm một phương thức mới SapXepVaXuatRaFile
Lặp lại code sắp xếp mảng
4. Một số chuẩn mã nguồn thông dụng
Viết một phương thức hiệu quả(tt)
Kích thước của một phương thức?
Nhiều thí nghiệm cho thấy một phương thức có khoảng từ 50 đến 150 dòng code là hợp lý
(Trích Steve McConnell, Chapter 7.4 - Code Complete, Second Edition. 2004)
4. Một số chuẩn mã nguồn thông dụng
Left-hand comparsionC++ : Thực hiện phép so sánh
if (a == 42) { ... } // A right-hand comparison, kiểm tra a có bằng 42. if (42 == a) { ... } // dùng kiểu the left-hand comparison, kiểm tra 42 có
bằng a .
if (a = 42) { ... } // biên dịch không lỗi, kết quả sai khó debug
if (42 = a) { ... } // biên dịch lỗi vì ta thực hiện gán 42 = a
Đối với các ngôn ngữ lập trình sử dụng “=” thực hiện phép gán và “==“ thực hiện so sánh.
Điều gì xảy ra nếu sơ ý viết “==” thành “=”?
4. Một số chuẩn mã nguồn thông dụng
Sử dụng biến (variables)Khai báo biến
Tránh tình trạng khai báo biến mà không sử dụng.
Nhiều trình biên dịch warning khi complie
Khai báo tất cả các biến mặc dù trình biên dịch không bắt buộc làm vậy
Visual Basic cho ta sử dụng biến mà không cần khai báo
Không kiểm soát được kiểu dữ liệu và giá trị khởi tạo
4. Một số chuẩn mã nguồn thông dụng
Các lệnh if, while, for không nên lồng nhau hơn 3 bậc
4. Một số chuẩn mã nguồn thông dụng
Các lệnh if, while, for không nên lồng nhau hơn 3 bậc
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
5. Phương pháp áp dụng chuẩn mã nguồn
1/6. Chọn một bộ chuẩn
5. Phương pháp áp dụng chuẩn mã nguồn
2/6. Lập checklist các luật muốn áp dụng
5. Phương pháp áp dụng chuẩn mã nguồn
3/6. Chuẩn bị mã nguồn
5. Phương pháp áp dụng chuẩn mã nguồn
4/6. Chọn một công cụ hỗ trợ chuẩn mã nguồn
Personal License : $199 Personal License : $99
Personal License : $99
5. Phương pháp áp dụng chuẩn mã nguồn
5/6. Dùng tool chỉ định các luật trong checklist
5. Phương pháp áp dụng chuẩn mã nguồn
6/6. Dùng tool áp đặt các luật đã chọn lên mã nguồn
Nội dung trình bày
3. Chuẩn hình thức và chuẩn ngữ nghĩa
2. Tầm quan trọng của chuẩn mã nguồn
1.Chuẩn mã nguồn là gì?
5. Phương pháp áp dụng chuẩn mã nguồn
4. Một số chuẩn mã nguồn thông dụng
6. Công cụ hỗ trợ chuẩn mã nguồn
6. Công cụ hỗ trợ chuẩn mã nguồn
Demo