2. 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
3. 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.
…
www.themegallery.com
4. 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. 2. Tầm quan trọng của chuẩn mã nguồn
Dễ bảo trì, sửa lỗi.
www.themegallery.com
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ắc
Có người nhờ bạn sửa lỗi chương
trình giúp họ
6. 2. Tầm quan trọng của chuẩn mã nguồn
Dễ bảo trì, sửa lỗi.
www.themegallery.com
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;
}
7. 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ình
www.themegallery.com
public 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;
}
8. 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ình
www.themegallery.com
public 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;
}
9. 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óm
www.themegallery.com
Class NhanVien {
string _maNhanVien;
string _hoTen;
Date _ngaySinh;
doule luong;
double phuCap;
string P_tinhTrangHonNhan;
public int TinhTuoi(){…}
pubic double tinhLuongCuoiThang(){…}
}
10. 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
11. 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
12. 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
…
www.themegallery.com
13. 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
14. 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
15. 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
16. 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
17. 4. Một số chuẩn mã nguồn thông dụng
White Space
www.themegallery.com
Nhữngquyđịnhvềsửdụngkhoảngtrắng(space),thụtđầu
dò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.
18. 4. Một số chuẩn mã nguồn thông dụng
White Space
www.themegallery.com
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?
19. 4. Một số chuẩn mã nguồn thông dụng
White Space – thụt đầu dòng
www.themegallery.com
Xá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.
20. 4. Một số chuẩn mã nguồn thông dụng
White Space – thụt đầu dòng
www.themegallery.com
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();
}
}
}
21. 4. Một số chuẩn mã nguồn thông dụng
White Space – Dòng trống
www.themegallery.com
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
22. 4. Một số chuẩn mã nguồn thông dụng
White Space – dòng trống
www.themegallery.com
//do something
string connectionString = ReadConnectionString();
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM Customer;";
conn.Open();
//so something else
23. 4. Một số chuẩn mã nguồn thông dụng
White Space – dòng trống
www.themegallery.com
//do something
string connectionString = ReadConnectionString();
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM Customer;";
conn.Open();
//so something else
24. 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++)
25. 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)
26. 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
}
}
}
27. 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
}
}
}
28. 4. Một số chuẩn mã nguồn thông dụng
Comment
Không viết các comment chỉ lặp code
int sum = 0;
//Lặp từ 0 đến 100
for (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.
29. 4. Một số chuẩn mã nguồn thông dụng
Comment
Viết các comment không cầu kì; càng đơn giản càng tốt
30. 4. Một số chuẩn mã nguồn thông dụng
Comment
Viết các comment không cầu kì; càng đơn giản càng tốt
31. 4. Một số chuẩn mã nguồn thông dụng
Comment
Khi 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
32. 4. Một số chuẩn mã nguồn thông dụng
Comment
Khi 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
33. 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.
34. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Quy 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
35. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Class
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
36. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Interface
Giống như đặt tên class nhưng có thêm tiền tố I
IComponent
ICustomAttributeProvider
37. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Phươ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ĩa
XuatKetQua, SapXep
Không phân biệt tên các phương thức bằng số
TinhLuongNhanVien1, TinhLuongNhanVien2, TinhLuongNhanVien3
38. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Biế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
39. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Biế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)
40. 4. Một số chuẩn mã nguồn thông dụng
Quy ước đặt tên
Biế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
41. 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
42. 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ăng
void 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 file
Giả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
43. 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)
44. 4. Một số chuẩn mã nguồn thông dụng
Left-hand comparsion
C++ : 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 “=”?
45. 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
46. 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
47. 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
48. 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
49. 5. Phương pháp áp dụng chuẩn mã nguồn
1/6. Chọn một bộ chuẩn
50. 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
51. 5. Phương pháp áp dụng chuẩn mã nguồn
3/6. Chuẩn bị mã nguồn
52. 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
53. 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
54. 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
55. 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