Phong cách lập trình

Hướng dẫn phong cách code C

Tài liệu được dịch từ Phong cách lập trình code C theo hướng dẫn UNIX của New Hall

Đường dẫn tài liệu gốc: https://www.cs.swarthmore.edu/~newhall/unixhelp/c_codestyle.html

Người dịch: tuanctob48

1. Thiết kế chương trình theo module.

Suy nghĩ thật kĩ càng về các hàm cũng như cấu trúc dữ liệu bạn sẽ sử dụng trước khi bắt tay vào code.

Comment: Điều này hỗ trợ rất tốt cho việc debug cũng như nâng cấp và bảo trì sau này. Bạn càng dành nhiều thời gian cho việc thiết kế thì sẽ càng tiết kiệm thời gian trong việc phát triển và bảo trì.

Gợi ý: Khi bắt đầu một chương trình, nên dùng giấy và bút viết ra cấu trúc dữ liệu và các trường hợp có thể xảy ra của bài toán. Sau khi đã có cấu trúc dữ liệu và thuật toán để giải quyết thì bắt tay vào việc liệt kê các hàm cần sử dụng. Tránh việc chưa suy nghĩ kĩ hoặc chưa có ý tưởng giải quyết đã vội vã lập trình. Một số bạn trong câu lạc bộ của chúng ta cũng mắc phải sai lầm này. Các bạn bắt tay vào viết code khi chưa có cách làm, đôi khi còn chưa hiểu đề.

2. Có thói quen sử dụng các phương pháp phát hiện lỗi và xử lý.

Luôn kiểm tra giá trị trả về của hàm, và xử lý lỗi một cách phù hợp (SEGFAULT không phải là một cách xử lý lỗi phù hợp)

Comment: việc luôn kiểm tra giá trị trả về của hàm cũng nhưng sử dụng các phương pháp sẵn sàng xử lý lỗi giúp cho hiệu suất coding tăng khá đáng kể, tránh được những lỗi vặt trong chương trình.

Gợi ý: Nội dung này trong phát triển phần mềm là một phần của Test-Driven Development. Hiện tại, có thể áp dụng phong cách lập trình này như sau: Khi các bạn viết một hàm bất kì, có thể viết một đoạn code ở chương trình chính và test hàm đó. Ví dụ, bạn viết hàm kiểm tra một số có phải là số nguyên tố hay không, sau khi viết xong hàm, bạn có thể gọi hàm đó và truyền vào một vài giá trị số để test kết quả của hàm có chính xác hay không.

Có thể tham khảo thêm về TDD trong C tại đây: http://www.slideshare.net/amritayan/test-driven-development-in-c

3. Luôn giải phóng bộ nhớ khi cấp phát động.

Nên ngay lập tức viết hàm delete() sau khi sử dụng hàm new để tránh quên trong C++ hoặc free() sau malloc() trong C.

Comment: em thường dính lỗi này :))

4. Không nên viết hàm quá dài.

Cái gì cũng có ngoại lệ nhưng đừng cố biến ngoại lệ thành thường lệ.

5. Sử dụng tên biến, tên hàm, tên hằng có tính đặc tả phù hợp.

Bạn không nên đặt tên biến quá dài cũng như quá chung chung, vd tên hàm nên là getRadius() thay vì foo() thể hiện mục đích của hàm. Sử dụng các hàm/biến với tên là tiếng Anh.

6. Khai báo hằng số

Nên Khai báo hằng số và sử dụng chúng thường xuyên trong chương trình hơn là sử dụng những số cụ thể. Việc sử dụng hằng số khiến cho code của bạn dễ đọc hơn cũng như dễ chỉnh sửa hơn.

Ví dụ 1:

Ví dụ 1.1                                                                       Ví dụ 1.2

Nếu như muốn thay đổi giới hạn của điều kiện ở dòng thứ 3 chẳng hạn, bạn buộc phải thay đổi tất cả các số trong VD 1.2 và chỉ việc thay đổi 1 hằng số MAX trong VD 1.1

7. Tránh sử dụng biến toàn cục

Thay vì đó, ta nên sử dụng truyền tham chiếu đến biến đó và thay đổi giá trị của nó (hỗ trợ trong C++, Java, C#, C chỉ hỗ trợ tham chiếu thông qua con trỏ?).

8. Hàm main() nên là một cái nhìn tổng quát

Hàm main() nên là một cái nhìn tổng quát về cách thức hoạt động cơ bản của chương trình chứ không nên quá đi sâu vào chi tiết, việc đó là của các hàm và thủ tục.

9. Sử dụng indent để code

Nên sử dụng indent cho dễ nhìn code. Nên indent mỗi lần sau khi khai báo hàm, sử dụng vòng lặp, câu lệnh rẽ nhánh, v…v… và nên indent cùng mức đối với những câu lệnh trong cùng một khối.

Ví dụ 2:

Trong vim, bạn có thể sử dụng câu lệnh ‘Shift + G’ ( bôi đen đến cuối) và ‘=’ ( để tự động fomat code).

10. Độ dài dòng code

Lưu ý về độ dài 1 dòng code, không nên để dòng nào chứa quá 80 ký tự, nếu hơn, bạn nên cắt thành từng dòng lệnh nhỏ.

Ví dụ 3.1:

Ví dụ tương tự đối với Comment:

Ví dụ 3.2:

Ví dụ tương tự đối với Chuỗi ký tự:
Đặc biệt: Nhớ comment code của bạn!

11. Những lưu ý khi comment code:

11.1. Comment file

Mỗi file header và file mã nguồn nên có một phần giới thiệu tổng quát nội dung, cũng như mục đích của file, nên có kèm theo tên của bạn cũng như ngày tháng được tạo.

11.2 Comment hàm

Mỗi hàm trong file .h hay file .c nên có một comment giới thiệu về:

– Function này làm được gì?

– Biến số là những biến số nào (áp dụng nghiêm chỉnh quy tắc đặt tên biến đặc tả)

– Giá trị trả về là gì ( nên nói rõ giá trị trả về của hàm là biến số hay thông báo về lỗi).

Trong file header, hàm thường được comment dành cho người sử dụng còn trong file .c comment dành cho người đọc có ý định cài đặt hàm đó vì vậy trong file .c, comment thường đính kèm một bản chi tiết cách mà function được cài đặt. Và thông thường giữa các lập trình viên với nhau sẽ là nêu các bước chính của giải thuật được cài đặt.

Tác giả khuyên : Nên viết comment của function trước rồi mới đến code, đối với function phức tạp, việc có comment nói lên từng bước của giải thuật sẽ giúp ích rất nhiều cho bạn sau này cũng như người khác khi đọc code.

Ví dụ 4:

Đó là comment tổng quát, còn comment đối với mỗi dòng là cực kỳ cần thiết đối với những đoạn phức tạp, sử dụng mẹo. Inline comment rất quan trọng, giúp cho phần phức tạp của code bạn trở nên dễ hiểu, nhưng đừng quá lạm dụng comment. Tránh comment những điều hiển nhiên, việc chọn tên biến, tên hàm mang tính đặc tả sẽ tốt hơn rất nhiều so với việc bạn comment tràn lan. Dưới đây là ví dụ cho việc comment không cần thiết và chẳng đem lại thông tin gì mới ngoài những điều hiển nhiên mà ngôn ngữ C tự nó đã thể hiện:

Ví dụ 5:

Tái bút: Đây là bản dịch đầu tiên của mình, từ ngữ còn chưa trau chuốt cũng như còn nhiều thiết xót, nếu bạn muốn đóng góp xin gửi thư về hòm mail tuanctob48@gmail.com, mình luôn sẵn sàng trả lời email của các bạn. Bài được viết nhằm thực hiện mục tiêu đóng góp cho cộng đồng – mục đích của EGG Club! Chúc các bạn lập trình ngày càng tiến bộ.

The following two tabs change content below.

tuanctob48

Latest posts by tuanctob48 (see all)