TCLT: Gửi các bạn bài viết của Trung NT về Coding conventions. Rất cảm ơn Trung NT đã đóng góp một bài viết rất hữu ích, mong bạn tiếp tục ủng hộ Tạp Chí Lập Trình nhiều hơn nữa thông qua các bài viết của mình. 🙂

Coding conventions là gì?

Coding conventions (CC) là một tập hợp các quy tắc được định nghĩa ra để ràng buộc quá trình code trong toàn thể một dự án. CC thường “có thể” được xây dựng sau khi quá trình phân tích yêu cầu NSD hoàn tất, dựa vào các nhóm chức chức năng của một hệ thống, mà project-manager sẽ dựng một bộ khung CC cho toàn project cũng như team-leader có thể dựng lên từng bộ CC cho team mình dựa trên bộ khung gốc.

Mục đích?

CC dựng lên một bộ quy tắc để thống nhất chung cho hệ thống hoặc dự án. Khi làm việc nhóm, các thành viên phải đề cao tính cộng tác (collaboration), với các dự án nhỏ, chỉ một vài thành viên, việc cộng tác đã khó, với những dự án lớn, số lượng thành viên không thể đếm trên đầu ngón tay nữa, việc trao đổi, cộng tác giữa các thành viên chung một team, giữa các thành viên khác team, cần có một quy tắc chung. Như các object tương tác với nhau dựa trên interface vậy 😉

Trong thực tế hiện nay, các dự án thường phát triển theo mô hình hộp cát (sandbox), mỗi team, thậm chí mỗi thành viên thường làm gọn một gói (package/namespace), một lớp (class),… tất cả dựa trên một tài liệu thiết kế chi tiết (DDD) vốn là sản phẩm của brainstorming tập thể. Tài liệu chỉ như một bản vẽ kỹ thuật xây dựng, để dựng lên được một công trình, muốn vững, muốn chắc phải có cột kèo và những thứ đó phải thật ăn khớp với nhau. CC phải đảm bảo công việc giữa các team trơn tru, mỗi thành viên đều có thể sử dụng được sản phẩm của thành viên khác khi họ có trong tay tài liệu thiết kế chi tiết.

Làm thế nào…?

… để xây dựng một bộ CC tốt? Bộ CC tốt phải bao hàm đủ các quy tắc xử lý cho các “vấn đề” thường gặp trong quá trình triển khai code, từ việc quy ước đặt tên biến, tên thủ tục, tên hàm (các identifier nói chung) cho đến việc thụt đầu dòng khi code ra sao, soạn các đoạn mã rẽ nhánh thế nào đều cần được lên “kế hoạch xử lý”.

Để có thêm cái nhìn sơ bộ về CC, bạn có thể tham khảo bảng sau:

Đặt tên biến

  • Không nên

[sourcecode language=”cpp”]
/*
Nếu là người không làm ra hàm calc này,
sẽ rất khó để hiểu nó làm gì
*/
function int calc(int x){
var y;
y = 11.2 * x;
return y;
}
[/sourcecode]

  • Nên

[sourcecode language=”cpp”]
/*
Bằng cách đặt tên biến, tên hàm, tham số dễ hiểu,
theo quy ước có sẵn, việc đọc hiểu code trở nên dễ dàng hơn
*/
function int tinhTienLai(int tienVon){
var tienLai;
tienLai = 11.2 * tienVon;
return tienLai;
}
[/sourcecode]

Cấu trúc rẽ nhánh

  • Không nên

[sourcecode language=”cpp”]
/*
Khi soạn ra điều kiện cho một lệnh rẽ nhánh tránh
viết rườm rà, trình bày phức tạp
*/
if (tienVon > 0 and xacNhan != true and daDangNhap = true) {
tinhTienLai(tienVon);
xacNhan = hoiXacNhan();
}
[/sourcecode]

  • Nên

[sourcecode language=”cpp”]
/*
Rút gọn các phần thừa trong biểu thức so sánh,
thêm các cặp ngoặc để làm rõ ràng biểu thức là việc nên lưu tâm
*/
if ((tienVon > 0) and (!xacNhan) and (daDangNhap)){
tinhTienLai(tienVon);
xacNhan = hoiXacNhan();
}
[/sourcecode]

Cấu trúc một thủ tụchàm

  • Không nên

[sourcecode language=”cpp”]
/*
Cấu trúc thủ tụchàm không rõ ràng, khai báo tùy tiện,
không bắt lỗi (ngoại lệ)
*/
function int abc(int x){
var y;

var z;

return y;
}
[/sourcecode]

  • Nên

[sourcecode language=”cpp”]
/*
Định nghĩa, khai báo ở đầu hàm, thủ tục để nhận rõ các
tài nguyên sử dụng, bắt và xử lý các ngoại lệ để
đảm bảo nắm hết các tình huống xảy ra
*/
function int abc(int x){
try{
//Khai báo
var y,z;
//Thân thủ tụchàm

}catch{
//Xử lý ngoại lệ
y = -1;
}
return y;
}
[/sourcecode]

Trên đây chỉ là một vài tình huống sơ bộ để các bạn thấy được việc nên đề ra một bộ CC chuẩn cho dự án. Có rất nhiều CC được soạn sẵn, rất tỉ mỉ và công phu, hãy cứ gặp bác google già và hỏi bác về “coding convention”, đảm bảo bác sẽ không làm bạn thất vọng 🙂

Túm lại …?

Việc dựng lên và tuân theo CC trong một dự án là việc nên làm, tất nhiên đây không thể là luật bắt phải tuân theo bởi CC đề ra không phải là cứng, nó chỉ là một dạng guideline để các coder tuân theo. Tuy nhiên CC sẽ là một thứ công cụ hữu hiệu giúp các thành viên của một dự án có một tiếng nói chung “hơn” so với bình thường. Hãy cứ lấy “lạt mềm buộc chặt”.

Nguyễn Trí Trung  (Software Engineer @ FPT Information System)