Top Ad unit 728 × 90

Latest news

recent

Quy tắc lập trình với C của Bioz


Với mỗi lập trình viên, hay người làm phần mềm nói chung, việc tập cho mình đi theo những quy định là điều không thể không thực hiện. Đó có thể là những nguyên tắc liên quan tới các tiêu chuẩn, các chứng nhận quốc tế, trong thiết kế, xây dựng chương trình, đó cũng có thể là các nguyên tắc, định dạng do tổ chức, nhóm mà bạn làm việc tự đặt ra từ kinh nghiệm tích lũy theo thời gian, đó dĩ nhiên cũng bao gồm các nguyên tắc do tự chính bản thân bạn sáng tạo từ đau thương. Trong bài viết này tôi gởi đến các bạn cái mà tôi gọi là các quy tắc trong lập trình C của Bioz do tôi xây dựng và sử dung trong VnSLib cũng như những dự án có dùng C của bản thân. Tôi không có tham vọng nó sẽ được sử dụng rộng rãi bởi người đọc, tôi chỉ mong muốn các bạn sẽ hiểu thế nào là khái niệm về định dạng hay quy tắc trong viết mã (code convention), từ đó có ý thức tự hoàn thiện và rút ra cho mình những phong cách, nguyên tắc tối ưu mà đi theo. Khi bạn còn là một newbie đơn thương chiến trận những thứ này sẽ làm bạn thấy vướng víu và khó chịu, nhưng một khi bạn đã gia nhập vào một đoàn quân, đã trở thành một kiếm sĩ dày dạn, hậu quả do bạn gây ra không chỉ bản thân bạn tự chịu nữa thì code convention sẽ trở thành thứ bí kíp nội công đóng góp rất lớn vào đẳng cấp, hiệu quả và sự tinh tế trong kỹ năng của bạn.  
1. Các nguyên tắc trình bày
  • Luôn sử dụng /* */ cho Comment, không dùng "//".
  • Sử dụng tiếng Việt không dấu cho comment.
  • Tất cả các biến phải được khai báo trước khi bắt đầu bất kì tính toán nào. 
  • Đặt tên tập tin chứa tham số hằng số: VnSConstXXX.h (VnS là tiền tố tùy theo dự án)
  • Đặt tên cặp tập tin định nghĩa thuật toán: VnSXXX.h và VnSXXX.cpp
  • Đặt tên thư viện: VnSLib + version, ví dụ: VnSLib0100.dll, VnSLib0100.lib. số phiên bản gồm 4 số, 2 số đầu là nhưng số chính đánh dấu sự thay đổi lớn, 2 số sau chỉ thị sự thay đổi nhỏ mang tính sửa lổi.
  • Trên đầu mỗi tập tin đều có chú thích về bản quyền, thông tin liên hệ của IEEV.
    /*
    - Cac tac gia : Binh Nguyen - Bioz, ...
    - Ban quyen thuoc ve : IEEV.org.
    - Thong tin them : CD-01042010;UD-01042010;
    - Mo ta : Khai bao tieu de cho nhom cac thuat toan tien ich
    */
  • Đầu mỗi hàm đều có chú thích về tác giả và thông tin thư điện tử liên hệ.
    /*-----------------------------------------------------------------
    - Tac gia : Binh Nguyen - Bioz
    - Thu dien tu : binh.nguyen@ieev.org
    - Thong tin : CD-01042010;UD-01042010;
    - Mo ta van tat: Kiem tra hai hinh chu nhat co dinh nhau hay không.
                            Co tra ve 1, khong tra ve 0.
    -------------------------------------------------------------------*/
  • Tên biến được bắt đầu bằng chử thường và viết hoa chử cái đầu cho các từ tiếp theo. Ví dụ: int iCount;
  • Tên biến thông thường bắt đầu bằng tiền tố chỉ loại, ở đây chúng ta có 4 loại: biến bình thường không có tiền tố, biến con trỏ có tiền tố là "p", biến hằng số có tiền tố là "c", biến mảng trong stack có tiền tố là "a". Ví dụ: int iCount; int *pICount; const int cICount; int aICount[4];
  • Theo sau tiền tố chỉ loại thì tên biến sẽ bao gồm tiền tố chỉ kiểu dữ liệu. Ví dụ: float *pFCount;
  • Tên hàm được viết hoa cho tất cả các chử cái đầu có định dạng VnS + Nhóm chức năng + Ý nghĩa tên hàm. Ví dụ: VnS + Util + Is2RecOverlapped();
  • Đối với tham số của hàm, nếu là tham số nhập sẽ bắt đầu bằng "i", tham số xuất bắt đầu bằng "o", tham số hằng số bắt đầu bằng "c", tham số vừa nhập vừa xuất thì bắt đầu bằng "iO", phần còn lại của tên sẽ tuân theo quy tắc đặt tên biến. Ví dụ: int iIWidth;
  • Tuyệt đối không sử dụng các cấu trúc if rút gọn: a ? b : c trong hàm (trừ trường hợp MACRO)
  • Luôn luôn sử dụng {} cho mọi trường hợp dù không đòi hỏi.
  • Các cấu trúc lồng phải được thụt đầu hàng để thể hiện rỏ ràng thứ tự cha và con.
  • Định nghĩa hằng số theo nguyên tắc viết hoa toàn bộ và dùng dấu _ để ngăn cách giữa các từ. Ví dụ #define HISTOGRAM_BINS 256
  • Định nghĩa cấu trúc mới với tên theo nguyên tắc hàm số. Ví dụ:
    typedef struct _tag_vns_rect
    {
          int iTopX;
          int iTopY;
          int iBottomX;
          int iBottomY;
    }VnSRect;
  • Chỉ sử dụng kiểu integer cho biến đếm trong vòng lặp, khai báo rời bên ngòai.
  • Các biến đếm trong vòng lặp nếu không có ý nghĩa đặc biệt thì dùng các chử cái thông thường như: x, y, i, j, k để đặt tên.
  • Hạn chế tối đa sử dụng Macro, Alias cho các kiểu dữ liệu, chỉ sử dụng tối ưu các kỉ thuật nền mà c cung cấp nhằm đơn giản mã nguồn.
  • Chỉ dùng MACRO để định nghĩa vài hàm căn bản và đơn giản (điều này nhằm làm code gọn gàng + giảm chi phí Function Call). Nguyên tắc đặt tên MACRO giống hàng số và có định dạng: VNS_MACRO_ + tên có nghĩa. Ví dụ: VNS_MACRO_CUBE.
2. Các nguyên tắc cấu trúc nội dung
  • Với các thuật toán nhỏ, quá trình chạy cần 1 bước thì chỉ trình bày trong 1 hàm độc lập và xếp vào nhóm các thuật toán nào đó tương ứng với cặp .h và .c.
  • Các thuật toán lớn cần nhiều bước như: khởi tạo, cấp phát bộ nhớ, cập nhật xử lý, giải phóng bộ nhớ ...thì ta sử dụng 1 cặp .h và .c dành riêng để định nghĩa thuật toán đó.
  • Thuật toán cần có hệ thống tham số cố định (const), với các thuật toán lớn ta dùng riêng một tập tin .h có tên: VnSConstXXX.h, với nhóm các thuật toán nhỏ ta gom các const đó về cùng tập tin .h ngoài bộ đôi .h và .c đã dùng định nghĩa hàm.

Cont...
Binh Nguyen - Bioz
Quy tắc lập trình với C của Bioz Reviewed by Bioz Nguyen on 5:44:00 PM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.