Một số nguyên tắc cơ bản nên tuân thủ khi code

Có một số nguyên tắc cơ bản nên tuân thủ khi code, nó sẽ giúp code sáng sủa, dễ đọc, dễ hiểu, dễ debug, dễ maintain và nhìn pro hơn.

A. Trình bày tổng thể chương trình: 1. Môđun hóa chương trình

Chương trình của bạn nên được tách thành nhiều môđun, mỗi môđun thực hiện một công việc và càng độc lập với nhau càng tốt. Điều này sẽ giúp bạn dễ bảo dưỡng chương trình hơn và khi đọc chương trình, bạn không phải đọc nhiều, nhớ nhiều các đoạn lệnh nằm rải rác để hiểu được điều gì đang được thực hiện.

Khi muốn chuyển thông tin cho các chương trình con, bạn nên sử dụng các tham số. Tránh sử dụng các biến toàn cục để chuyển thông tin giữa các chương trình con. làm như vậy bạn sẽ triệt tiêu tính độc lập giữa các chương trình con và rất khó khăn khi kiểm soát giá trị của chúng khi chương trình thi hành. (Chú ý, bạn nên phân biệt giữa biến toàn cục và hằng số toàn cục)

2. Giữ cho code đơn giản và rõ ràng trong hầu hết các tình huống.

Ví dụ →

nên được viết là:

Hoặc:

nên được viết là:

3. Chương trình của bạn nên thực hiện như một dòng chảy từ trên xuống dưới, không nên có những thay đổi bất chợt.

Tức là:

  • Không nên sử dụng lệnh goto
  • Mỗi một hàm chỉ nên có một chỗ return, không nên return nhiều nơi trong hàm

B. Khai báo biến và hàm

1. Một câu lệnh nên được đặt riêng trên một dòng, điều này sẽ giúp bạn rất nhiều trong quá trình debug.

Ví dụ → Nếu bạn viết

bạn sẽ không biết được vòng lặp trên được thực hiện bao nhiêu lần khi debug.

tương tự, nếu viết:

sẽ không biết được lệnh if có được thực hiện hay không trong quá trình debug (trừ khi kiểm tra giá trị của i).

Những trường hợp này nên được viết như sau →

2. Các dấu {} bao các khối lệnh phải được căn thẳng hàng.

Có 2 cách thường được dùng để canh thẳng các dấu {} →

Cách 1:

Cách 2:

khi viết các khối lệnh nằm trong một cặp ngoặc {}, nên viết cặp ngoặc trước rồi mới viết các lệnh vào giữa, làm như vậy sẽ tránh trường hợp thiếu các dấu ngoặc này.

3. Biến nên được khai báo ở gần vị trí mà nó bắt đầu được sử dụng, như vậy bạn sẽ tránh được việc khai báo một loạt các biến dư thừa ở đầu hàm hay chương trình.

Nguyên tắc này chỉ áp dụng cho C++ vì trong C thì tất cả các biến buộc phải khai báo ở đầu hàm.

4. Mỗi biến nên khai báo trên một hàng nhằm dễ chú thích về ý nghĩa của mỗi biến.

Ví dụ →

5. Tên biến nên là danh từ và đặt sao cho đủ nghĩa để nói lên được nó đại diện cho cái gì, nó có thể là các từ hoàn chỉnh hoặc viết tắt nhưng phải dễ đọc (dễ phát âm). Nếu khó đọc thì khi trao đổi với nhau nói ra được cái tên biến chắc méo hết cả mồm.

Ví dụ →

thì rõ ràng, dễ hiểu hơn là:

6. Tên của hàm nên là động từ và phản ánh chính xác công việc mà nó thực hiện.

Ví dụ →

Nên đặt tên hàm là CheckForErrors() thay vì ErrorCheck(), DumpDataToFile() thay vì DataFile().

7. Nên sử dụng hợp lý các ký tự hoa và thường khi đặt tên biến và hàm, điều này sẽ giúp chương trình dễ đọc hơn.

Có nhiều lựa chọn về nguyên tắc đặt tên biến, tên hàm tùy thuộc từng ngữ cảnh cụ thể (tùy ngôn ngữ, tùy dự án,…). Sau đây là một ví dụ một về nguyên tắc được áp dụng khá nhiều khi code với C/C++ →

  • Tên biến được viết bằng chữ thường, viết hoa chữ các đầu tiên của mỗi từ (trừ từ đầu tiên). Kiểu viết này còn gọi là camelCase – bướu lạc đà, ví dụ: totalHouseWorked.
  • Tên hằng số được viết hoa toàn bộ, các từ viết cách nhau bằng dấu gạch dưới, ví dụ: TAX_RATE.
  • Các kiểu dữ liệu do người dùng định nghĩa được viết hoa toàn bộ hoặc viết hoa các ký tự đầu, ví dụ: BIGINT hay BigInt.
  • Tên các hàm được viết hoa các chữ cái đầu, ví dụ: DisplayInfo().

8. Các hằng số không nên viết trực tiếp vào chương trình.

Thay vì thế, người ta thường sử dụng lệnh #define hay const để đặt cho những hằng số này những tên có ý nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát những chương trình lớn vì giá trị của hằng số khi cần thay đổi thì chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa (ở #define hay const).

Ví dụ →

nên được viết như sau:

Chú ý: không nên dùng #define thường xuyên để định nghĩa các hằng số, bởi vì trong quá trình debug, bạn sẽ không thể xem được giá trị của một hằng số định nghĩa bằng #define

9. Khi khai báo con trỏ, dấu con trỏ nên được đặt liền với tên, nhằm tránh trường hợp sau:

Nếu muốn cả p, qr đều là con trỏ thì phải viết như sau:

Quy tắc này cũng áp dụng cho khai báo tham chiếu với dấu &

C. Trình bày dòng lệnh:

1. Các biến không nên được sử dụng lại với nhiều nghĩa khác nhau trong cùng một hàm.

Ví dụ →

Không nên sử dụng biến như sau:

2. Các toán tử và toán hạng trong một biểu thức nên được tách rời nhau nhằm làm biểu thức dễ đọc hơn.

Ví dụ → nên code như sau:

thay vì:

Ngoại lệ: không chèn khoảng trắng vào giữa toán hạng và toán tử ++ và —

3. Nên có khoảng trắng giữa dấu phẩy (hoặc dấu chấm phẩy) với các tham số.

Ví dụ → nên code như sau:

thay vì:

4. Nên có khoảng trắng giữa từ khóa và dấu ‘(’, nhưng không nên có khoảng trắng giữa tên hàm và dấu ‘(‘.

Ví dụ →

5. Nên sử dụng các dấu ( ) khi muốn tránh các lỗi về độ ưu tiên toán tử.

Ví dụ →

nên code như sau:

thay vì:

6. Khi so sánh biến với hằng số thì nên viết hằng số đứng trước. Ví dụ → nên viết như sau: thay vì: Lý do là bởi vì nếu chúng ta chẳng may gõ thiếu một dấu ‘=’ thì
  • Trường hợp hằng số đứng trước: trình biên dịch sẽ báo lỗi biên dịch khi ==> Chúng ta phát hiện và fix được luôn
  • Trường hợp biến đứng trước: trình biên dịch không báo lỗi nhưng sẽ dẫn đến những lỗi runtime khó điều tra hơn

7. Nên dùng các dòng trắng để phân chia các hàm trong một tập tin, các đoạn lệnh trong một hàm như: đoạn nhập xuất dữ liệu, các đoạn tương ứng với các bước xử lý khác nhau

8. Mỗi dòng lệnh không nên dài quá 80 ký tự, điều này giúp việc đọc chương trình dễ dàng hơn khi không phải thực hiện các thao tác cuộn ngang màn hình.

9. Một dòng lệnh quá dài nên được tách thành nhiều dòng.

Ví dụ → nên code như sau khi các dòng lệnh quá dài:

D. Comment trong chương trình:

1. Khi đặt các comment, nên sử dụng dấu // vì dấu này sẽ không gây ảnh hưởng khi bạn sử dụng cặp ký hiệu /* */ để vô hiệu hóa một đoạn lệnh trong quá trình sửa lỗi chương trình. Bạn nên nhớ rằng trong C/C++ không cho phép các cặp dấu /* */ lồng nhau.

2. Với các comment ngắn, nên đặt nó trên cùng dòng lệnh cần chú thích. Với các comment dài hơn, hoặc comment cho cả một đoạn lệnh thì nên đặt comment trên dòng riêng ngay phía trên câu lệnh cần comment.

Ví dụ →

comment ngắn :

comment dài :

3. Không nên lạm dụng comment.

Ví dụ →

Comment như trên là không cần thiết vì bản thân dòng lệnh đã nói lên mục tiêu của nó. Thay vì comment như vậy, bạn nên cố gắng giữ cho chương trình của dễ đọc, dễ hiểu qua bằng việc trình bày chương trình rõ ràng, đơn giản và cách đặt tên hợp lý.

==================================================

Ví dụ một chương trình viết tuân theo các quy tắc trên →

 

— Sưu tầm —