coding standards
DESCRIPTION
CODING STANDARDS. Nhóm 10 0812543 – TrầnVăn Tri 0812546 – Nguyễn Anh Trí 0812548 – Nguyễn Minh Trí 0812602 – Tăng Kiên Tường 0812609 – Nguyễn Văn Việt. Chuẩn mã nguồn. Tầm quan trọng của các chuẩn mã nguồn Chuẩn cú pháp Chuẩn ngữ nghĩa Phương pháp áp dụng chuẩn mã nguồn - PowerPoint PPT PresentationTRANSCRIPT
CODING STANDARDSNhóm 10
0812543 – TrầnVăn Tri0812546 – Nguyễn Anh Trí0812548 – Nguyễn Minh Trí0812602 – Tăng Kiên Tường0812609 – Nguyễn Văn Việt
1
Chuẩn mã nguồnTầm quan trọng của các chuẩn mã nguồnChuẩn cú phápChuẩn ngữ nghĩaPhương pháp áp dụng chuẩn mã nguồnCác chuẩn mã nguồn thông dụngCác công cụ hỗ trợ chuẩn mã nguồn
2
Coding standards là gì?Coding standard là 1 bộ luật ràng buộc các
quy tắc viết code mà lập trình viên phải tuân theo nhằm tạo sự thống nhất các đoạn code của 1 chương trình.
Việc tuân thủ các quy tắc này sẽ giúp duy trì khả năng làm việc nhóm, khả năng phát hiện lỗi, khả năng bảo trì và kế thừa của chương trình
Tầm quan trọng của coding standards?Một chuẩn code tốt rất quan trọng cho bất kỳ
dự án phần mềm nào, nhất là những dự án nhiều người
Góp một phần lớn trong việc đảm bảo chất lượng mã nguồn, ít lỗi và dễ bảo trì
Có ý nghĩa đối với lập trình viên hiểu các dòng code mới nhanh hơn và sâu sắc hơn
Một mã nguồn đưa ra thị trường như là 1 sản phẩm cần phải được đảm bảo là nó đóng gói theo chuẩn nhất định
Chuẩn cú pháp
1. File Names and Organization (tên file và tổ chức)
2. Indentation (thụt đầu dòng)3. Formatting (định dạng code)4. Naming Conventions (qui ước đặt tên)
5
Chuẩn cú pháp (tt)1. File Names and Organization
Sourcefiles: Đặt tên file và phần mở rộng theo 1 chuẩn có thể giúp tối ưu hóa tìm kiếm. VD: tên file trùng với tên class.
Organization: Sắp xếp các item khác nhau theo thứ tự trong source code. VD: chuẩn Java: Class variables > Instance variables > Constructors > Methods
Directory Layout: Tạo thư mục cho mỗi cái namespace. VD: MyProject.TestSuite.TestTier (C#)
MyProject/TestSuite/TestTier
6
Chuẩn cú pháp (tt)2. Indentation Wrapping Lines: Khi một biểu thức không
phù hợp trên một dòng đơnBreak after a comma.Break after an operator.Prefer higher-level breaks to lower-level breaks.Align the new line with the beginning of the
expression at the same level on the previous line
longMethodCall(expr1, expr2, expr3, expr4, expr5);
BAD STYLE – AVOID: PREFER: var = a * b / (c - g + var = a * b / (c - g + f) + f) + 4 * z; 4 * z;
7
Chuẩn cú pháp (tt)2. Indentation White Spaces:
Chuẩn thụt đầu dòng chưa có đồng nhất về số lượng đơn vị không gian(spaces)
Tốt nhất là dùng Tab vì các lí do sau: Có thể tùy chọn số lượng đơn vị space Giảm số lượng nhập khoảng trắng. Tăng giảm Block dễ dàng
Nhiều chuẩn code xác định số lượng khoảng trắng cho chổ thụt vào(indenting).
Các comment trong cùng block phải canh theo cùng 1 lề trái
8
Chuẩn cú pháp (tt)3. Formatting Inter-term spacing: khoảng cáchNên đặt khoảng cách sau dấu phẩy hoặc
chấm phẩyVD: TestMethod(a, b, c);
don't use : TestMethod(a,b,c) or: TestMethod( a, b, c );
Xung quanh các toán tửVD: a = b; // don't use a=b; for (int i = 0; i < 10; ++i) don't use: for (int i=0; i<10; ++i)
or for(int i=0;i<10;++i)9
Chuẩn cú pháp (tt)3. Formatting Put braces: Đặt dấu ngoặc { … }Tùy theo các chuẩn qui định
GNU, Linux , và các chương trình Windowsif (ia->ia_maddr != MADDRUNK){
sc->pPacketPagePhys = ia->ia_maddr; } BSD và Java if ((cp = strchr(*argv, ':')) != NULL) {
*cp++ = '\0'; a_gid(cp);
}
10
Chuẩn cú pháp (tt)3. Formatting Comment: chú thích cho nội dung dòng codeChú thích cho các thuật toáncase 10: /* yy */
lt->tm_year = ATOI2(p); if (lt->tm_year < 69) /* hack for 2000 ;-}*/ lt->tm_year += 100;
/* FALLTHROUGH */ case 8: /* mm */ lt->tm_mon= ATOI2(p);
Chú thích cho những phần chưa biết chính xácHay những vị trí cần chỉnh sửa trong tương tai.
/* * TODO - sort output */
11
Chuẩn cú pháp (tt)4. Naming Conventions Use of capitalization: dùng cho Java và Window
VD: RandomAccessFile Separation of words by underscores: dùng cho
UNIX và GNUVD: exponent_is_negative
Initials: dùng cho BSDVD: strcmp //string compareNgoài ra, tùy theo chuẩn còn có các qui tắc đặt tên biến, tên class, tên hàm khác nhau để chỉ rõ ý nghĩa, chức năng của biến, hàm đó.VD: int iCount; bool isString;public void CheckSum();Có nên đặt tên biến vòng lặp i,j,k ???
12
Chuẩn ngữ nghĩa
1. Object Lifeycle (vòng đời đối tượng)2. Control Flow (luồng điều khiển)3. Various data types (kiểu dữ liệu)4. Exception Handling (xử lí ngoại lệ)5. Coding Style (phong cách code)
13
Chuẩn ngữ nghĩa(tt)1. Object Lifeycle Khai báo và khởi tạo đối tượng (object)
gần nơi chúng được sử dụng: dễ dàng theo dõi
Khởi tạo biến tĩnh (static) trước khi gọi hàm: để hiểu được giá trị của biến tĩnh, nếu không khởi tạo thường thì trình biên dịch sẽ gắn giá trị là 0
Gán object = null để báo rằng object đó không còn cần thiết cải thiện bộ nhớ
14
Chuẩn ngữ nghĩa(tt)2. Control Flow Không nên thay đổi biến lặp bên trong
vòng lặp: đều này gây khó hiểu. Cập nhật biến lặp gần nơi điều kiện vòng lặp được xác định
Các lệnh (if, else, while, for, do, which) theo sau là blockif (b1) if (b2) Foo(); else Bar(); // which 'if' goes with the 'else'?
Lệnh switch phải có default sau case Lệnh if…else phải lồng hết các trường hợp Đừng so sánh rõ ràng với true, false.
VD: if (conditison == false) //badif(!condition) //good
15
Chuẩn ngữ nghĩa(tt)2. Control Flow Không truy cập hay thay đổi đối tượng nhiều
lần trong một biểu thức.VD: v[i] = ++i; // wrong
i = ++i + 1; // wrong
Không sử dụng câu lệnh lựa chọn (if, switch) thay vì một nhiệm vụ đơn giản hoặc khởi tạo.VD:
16
bool pos; if (val > 0) { pos = true; } else { pos = false; }
bool pos = (val > 0) ? true : false; Hoặcbool pos = (val > 0);
Chuẩn ngữ nghĩa(tt)3. Various data types Tùy theo ngôn ngữ sử dụng mà có các kiển dữ
liệu khác nhau Nên cân nhắc sử dụng kiểu dữ liệu cho hợp lí
VD: khi nào dùng int(Int32,Int64)? Khi nào dùng double? String? char*?
Nên dùng hằng số thay cho những giá trị cố địnhVD: const PI= 3.14
17
Chuẩn ngữ nghĩa(tt)4. Exception Handling Chỉ ném ngoại lệ (thorw exception) trong những
tình huống đặc biệt
Bắt trường hợp Exception bằng cách cung cấp một phương thức để trả về trạng thái của đối tượng
Bắt Exception nếu muốn bổ sung thông tin và trả về Messages cho người dùng biết
Không ném một ngoại lệ từ bên trong một hàm ngoại lệ
Các code khác nhau sẽ có chuẩn Exception khác nhau 18
Chuẩn ngữ nghĩa(tt)5. Coding Style Không pha trộn phong cách lập trình trong
một nhóm liên quan chặt chẽ như class hoặc trong một module
Mỗi dòng code không nên quá dài. Gây dài dòng khó đọc.VD: C# không quá 80 kí tự.
19
Phương pháp áp dụng chuẩn Làm sao quyết định loại chuẩn nào sẽ được áp
dụng và xác định trong chương trình của chúng ta như thế nào?Xem tài liệu hướng dẫn áp dụng chuẩn gắn liền với
ứng dụng đóXác định công cụ hỗ trợ chuẩn mã nguồn
Chúng ta nên hình thành phong cách áp dụng các mã nguồn bằng cách trả lời các câu hỏi sau:Khoảng trắng giữa các chữ có làm mã nguồn dễ
đọc hơn?Tên biến này có thể hiện nội dung chưa?Tên hàm này có đặt theo đúng chức năng gọi hay
ko?Chú thích mã nguồn thế nào?Thời gian sau quay lại chúng ta có thể dễ đọc, dễ
hiểu ko?
20
Các chuẫn mã nguồn thông dụng Có rất nhiều chuẩn mã nguồn như: GNU, BSD,
Java, UNIX, Window...- GNU(GNU compiler collection) : hay còn được gọi là
GCC, phát hành năm 1987. o Là trình biên dịch tiêu chuẩn của các HĐH Unix,
Linux, BSD, Mac, nền tảng nhúng như Symbian, AMCC,…
o Hỗ trợ các ngôn ngữ: Pascal, C, C++, java,…- JAVA: ra đời năm 1991 ở Sun Microsystems, phát
hành 1994 o Chạy trên mọi nền tảng khác nhau thông qua môi
trường thực (hỗ trợ Sun solaris, Linux, Mac OS, FreeBSD, Windows, BEA, IBM,HP,…)
o Hỗ trợ trên hầu hết các trình duyệt: Internet Explorer, Firefox, Safari 21
Các chuẫn mã nguồn thông dụng(tt)- Unix: dựa trên PDP-7 (1969-1970), viết bằng ngôn
ngữ C.oAT&T Bell Labs tiếp tục phát triển Unix lần lượt
dưới tên gọi hệ thống III, VoBắt đầu kết hợp với BSD từ hệ thống V
- BSD(Berkeley Software Distribution ): được phát triển từ Unix, sử dụng rộng rãi trong việc nghiên cứu cho các phần cứng PC
o FreeBSD: tập trung vào sự cài đặt dễ dàng của dòng máy PC
o NetBSD: tập trung vào nhiều kiến trúc CPU khác nhau
o OpenBSD: tập trung vào bảo mật
Các công cụ hỗ trợ chuẩn mã nguồnJava: checkstyle, jcscC#: stylecopC++: cppcheck
23
Thank you!
24