Quy tắc chung khi viết chương trình


Bộ quy tắc sau đây đảm bảo lập trình viên có thể viết chương trình dễ đọc, dễ sửa lỗi và dễ phát triển hơn cho bạn và người khác. Lưu ý bộ quy tắc hướng tới ngôn ngữ C++, và có thể khác đối với các ngôn ngữ lập trình khác.

Đặt tên và khai báo

Biến, hàm thường có 3 phong cách đặt tên chính. Khi lập trình, bạn nên theo một cách đặt tên cố định để đảm bảo tính đồng nhất:

  • Snake case: Sử dụng dấu gạch chân _ để phân cách các từ.

Ví dụ

hoc_sinh, tong_uoc_chan, \(\ldots\)

  • Camel case: Từ đầu tiên viết thường, các từ sau viết liền và viết hoa chữ cái đầu.

Ví dụ

hocSinh, tongUocChan, \(\ldots\)

  • Pascal case: Các từ viết liền và viết hoa chữ cái đầu mỗi từ.

Ví dụ

HocSinh, TongUocChan, \(\ldots\)

Tên hàm và tên biến nên rõ ràng, có ý nghĩa. Một số trường hợp ngoại lệ:

  • Tên biến, mảng, hàm do đầu bài yêu cầu như biến n, mảng a.
  • Tên biến lặp thường sử dụng chữ cái i, j, k,\ldots

Ví dụ

Ví dụ nên

C++
int tong_uoc_chan(int n) {
    int tong = 0;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0 && i % 2 == 0) {
            tong += i;
        }
    }

    return tong;
}

Ví dụ không nên

C++
int x(int a) {
    int b = 0;
    for (int i = 1; i <= a; i++) {
        if (a % i == 0 && i % 2 == 0) {
            b += i;
        }
    }

    return b;
}

Nên sử dụng const cho những biến có giá trị không đổi trong suốt chương trình như kích thước mảng, hằng số toán học, \ldots Tên biến hằng nên viết hoa.

Ví dụ

C++
const int MAX_N = 1001;
const double PI = 3.1415;

Định dạng

Các câu lệnh trong khối lệnh cần viết thụt vào bằng dấu TAB hoặc 2/4 dấu cách.

Ví dụ

Ví dụ nên

C++
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    if (n > 0) {
        cout << "n la so nguyen duong.";
    }

    return 0;
}

Ví dụ không nên

C++
#include <bits/stdc++.h>

using namespace std;

int main() {
int n;
cin >> n;
if (n > 0) {
cout << "n la so nguyen duong.";
}

return 0;
}

Mỗi dòng chỉ nên chứa tối đa một lệnh, mỗi dòng không chứa quá \(80\) kí tự. Nếu câu lệnh quá dài, câu lệnh nên được viết trên nhiều dòng.

Ví dụ

Ví dụ nên

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    string name;
    cin >> name;
    cout << "Chao mung ban da den voi chuong trinh C++ dau tien, " 
        << name << "!\n";

    return 0;
}

Ví dụ không nên

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    string name; 
    cin >> name;

    // Câu lệnh quá dài và tràn màn hình
    cout << "Chao mung ban da den voi chuong trinh C++ dau tien, " << na

    return 0;
}

Nên sử dụng dấu cách:

  • Xung quanh toán tử
  • Sau dấu phẩy và dấu chấm phẩy
  • Cho các thành phần của câu lệnh if, for, while, \(\ldots\)

Ví dụ

Ví dụ nên

C++
int tong_le(int l, int r) {
    int sum = 0;
    for (int i = l; i <= r; i++) {
        if (i % 2 == 0) {
            sum += i;
        }
    }

    return sum;
}

Ví dụ không nên

C++
int tong_le(int l,int r){
    int sum=0;
    for(int i=left;i<=right;i++){
        if(i%2==0){
            sum+=i;
        }
    }

    return sum;
}

Nên sử dụng cặp ngoặc tròn () để cho tăng độ rõ ràng cho câu lệnh.

Ví dụ nên

C++
if ((a > b) && (b > c) && (c > d)) {
    cout << "Day la mot day giam dan.";
}

\newpage

Chú thích (comment)

Nên sử dụng chú thích để giải thích những đoạn chương trình có thể gây phức tạp cho các người dùng khác, hoặc cho bản thân lập trình viên bảo trì và cải tiến chương trình trong tương lai. Tuy nhiên, cần tránh lạm dụng sử dụng quá nhiều chú thích cho đoạn chương trình đã quá dễ hiểu.

Ví dụ

Ví dụ nên

C++
// Hàm trả về tổng các ước dương chẵn của số n.
int tong_uoc_chan(int n) {
    int tong = 0;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0 && i % 2 == 0) {
            tong += i;
        }
    }

    return tong;
}

Ví dụ không nên

C++
// Hàm trả về tổng các ước dương chẵn của số n.
int tong_uoc_chan(int n) {
    // Khai báo biến tổng
    int tong = 0;

    // Sử dụng vòng lặp từ 1 đến n để tìm ước
    for (int i = 1; i <= n; i++) {
        // Kiểm tra điều kiện
        if (n % i == 0 && i % 2 == 0) {
            // Cộng ước i vào tổng
            tong += i;
        }
    }

    // Trả về biến tổng
    return tong;
}