C++ Coding Convetion
Bài viết này sẽ nói về quy tắc viết mã nguồn dành cho C++. Mình ko định làm nó thành 1 guide chuẩn, vì vậy ko cần thiết phải theo quy tắc, hay table of content gì cả...
Đây là 1 Coding Convention mà mình cho là hay nhất, có thể bạn sẽ gặp 1 cách khác khác cách này, tuy nhiên đó ko phải là vấn đề vì Coding Convention ko có chuẩn quốc tế
.
0. Tại sao tôi cần phải viết mã theo quy tắc?
Bạn ko bỏ nhiều thời gian nhất để lập trình, mà là để hoàn thiện, sửa chữa nó. Bạn có muốn viết khoảng 500 dòng code, rồi phải quay lên hoặc mở file header ra để xem tên class, tên function. Hoặc khi đọc code lại phải mở phần prototype lên để đọc comment xem cái hàm đó có tác dụng gì? Đấy chính là lí do cần Coding Convention.
1.Quy tắc về file
1.1 Quy tắc cơ bản
Quy tắc đầu tiên, quy tắc quan trọng nhất, đó là code phải được dịch 1 cách hoàn chỉnh được bởi các trình biên dịch thông dụng. Chú ý rằng dịch hoàn chỉnh tức là file phải được dịch mà ko có bất cứ 1 error hay warning nào (thường thì warning nhưng file sẽ vẫn được dịch, điều này là ko được chấp nhận).
1.2 Quy tắc về tên file
Tên file phải dễ hiểu và dễ nhớ và ko quá dài. Thường thì có 1 giới hạn 14 chữ cái được đặt ra, tuy nhiên bạn có thể làm theo hay ko thì...tùy.
Phần mở rộng của file phải theo đúng chuẩn
-------------------------------------------
File Contents Name
-------------------------------------------
C++ Source Code filename.cc
C++ Header File filename.hh
C Source Code filename.c
C Header File filename.h
Object Code filename.o
Archive Libraries filename.a
Dynamic Shared Libraries filename.so.<ver>
Shell Scripts filename.sh
Yacc/C Source Code filename.y
Yacc/C++ Source Code filename.yy
Lex/C Source Code filename.l
Lex/C++ Source Code filename.ll
Directory Contents README
Build rules for make Makefile
-------------------------------------------
Mặc dù danh sách đuôi mở rộng ko có .cpp, nhưng với giới hạn làm việc của sinh viên ta bây giờ thì điều đó là chấp nhận thỏa mái
.
1.3 Quy tắc về nội dung
Mặc dù ko có quy định nào về độ dài file, nhưng ko nên viết 1 file có code quá dài, sẽ rất khó chỉ để duyệt nội dung hoặc tìm đến 1 vị trí nào đó.
Ko nên viết quá dài trên 1 dòng, ko được phép viết quá 80 cột bởi vì sẽ gặp 1 vài vấn đề trong khi in ấn hoặc in ra terminal.
Trong header file phải có dòng
#ifndef _WF_FILENAME_HH
#define _WF_FILENAME_HH
Những phần còn lại có thể tìm đọc trong tài liệu vì mình thấy những phần đó ko cần thiết cho tài liệu căn bản lắm
2. Các quy tắc về định danh
2.1 Quy tắc chung
Các tên nên được viết = tiếng Anh, trừ khi bạn dùng nó cho mục đích cá nhân hoặc chỉ trao đổi với người nói cùng ngôn ngữ thì có thể dùng tiếng Việt. Nhưng dù dùng ngôn ngữ nào thì cũng đảm bảo rằng tên của bạn là có đủ ý nghĩa, và ngắn nhất có thể.
Tránh các tên 1 chữ cái (ví dụ a,i,j). Tuy nhiên đối với vài định danh ít ý nghĩa (ví dụ 1 biến chạy trong vòng lặp) thì có thể dùng 1 chữ cái.
Tránh các tên trùng hoặc dễ trùng, ví dụ 0 với O, i với 1 hay l, tránh các tên mà chỉ khác nhau về case, ví dụ như string với String, is với Is. Mặc dù điều này ko cấm, nhưng bạn nên tránh nó.
Có thể bạn nghe nói đến "Hungarian" style, nhưng đừng nghe nó, bởi vì mình thấy nó...xấu. Ví dụ thay vì viết someName, bạn phải viết shjtxSomeName...
2.2 Quy tắc về biến, phương thức và hàm
Biến, phương thức hay hàm phải được viết thường chữ cái đầu tiên, các chữ cái sau viết hoa, các từ được viết liền nhau. Ví dụ someName, myVar, myLength...
Các tên tạm thường dùng (biến chạy trong vòng lặp nhỏ) thường là i,j,k,n,m cho int, char thì thường là c,d..
Tên biến phải ngắn gọn và có nghĩa. Có thể thêm prefix, tuy nhiên ko nên dùng prefix làm dấu hiệu nhận biết kiểu như p bắt đầu cho biến con trỏ, s cho static... vì nó làm tên biến của bạn trở nên khó nhớ, và mất đi tính có nghĩa.
1 vài sufix và prefix thường dùng
is_, has_... ví dụ isPrime, hasSomething rất dễ nhớ và dễ hiểu
the_... dành riêng cho biến Global, theOne, chỉ là duy nhất
_count..dành cho biến đếm, ví dụ someCount...
Với tên mảng thì bạn nên đặt thêm chữ s ở cuối thể hiện số nhiều, ví dụ weapons[100]. Tuy nhiên 1 số trường hợp ko nên thêm, ví dụ như filename...Việc thêm hay ko tùy bạn
.
Nếu phương thức hay hàm có biến truyền theo quá dài thì hãy cắt nó thành nhiều dòng, và đảm bảo là dấu phẩy ở cuối mỗi dòng (chứ ko phải là đầu dòng tiếp theo).
2.3 Quy tắc về hằng
Hằng phải được viết HOA toàn bộ, và phân cách bởi dấu gạch dưới, ví dụ như INT_MAX, MAX_WIDTH...
2.4 Quy tắc về Class và Type
Các tên của Class và Type được viết hoa tất cả các chữ cái đầu từ, ví dụ MyClass, SomeThing.
Trang tiếp theo, quy tắc về viết code
Viết khá lắm. Code bao lâu rồi mà giờ đọc vẫn thấy có ích. Tuy nhiên sau này khi bạn sử dụng một chương trình sinh tài liệu tự động, có khi bạn phải phá vỡ quy tắc của bạn và làm theo quy tắc của chương trình kia ^^.
Phải biết thích nghi chứ
.
Có 1 thói quen tốt cũng hay, chỉ là tự mình quy định cho mình thôi. Còn nếu mình code ở 1 project có convention riêng thì vẫn cứ phải theo người ta