Tại sao luôn nên thêm ngoặc nhọn, dù chỉ có 1 dòng code sau if/ for?

— Anh Tèo này, em mới vào công ty A. Lúc đọc tài liệu onboard có cái coding convention qq thật!!!

— Convention gì?

— Đó là: luôn đưa code vào cặp ngoặc nhọn, cho dù chỉ có một mệnh đề duy nhất

// Bad
if (condition)
do_something()
// Good
if (condition) {
do_something()
}

— Oh. Vậy hãy nói quan điểm của em đi. Tại sao em lại cho là nó qq?

— Vì nó không cần thiết. Nếu điều kiện / vòng lặp chỉ có một dòng code ngay phía sau thì cho vào có tác dụng gì đâu? Code vẫn chạy như nhau. Mà bỏ bớt đi trông lại gọn gàng hơn; compile chắc tiết kiệm được cả kb (nếu dùng nhiều), chứ không ít.

— Em nói không sai. Cơ mà code code của em sẽ tiềm ẩn bug, nếu cứ viết theo kiểu ấy.

— Tiềm ẩn bug? Vì sao?

— Trường hợp em cần debug trên một môi trường mà không thể cắm debugger, thì em sẽ làm gì?

— Tất nhiên là em thêm log rồi.

— Uh, thêm log thì thêm vào đâu?

— Thêm ngay trước hoặc sau đoạn logic cần check có chạy vào hay không.

— Ví dụ đoạn code của anh thế này, em sẽ thêm vào như nào

if (!file_exist)
create_file();
content = read_all_files_content();
return content;
view raw example.ts hosted with ❤ by GitHub

— Em thêm 2 dòng log: 1 dòng trước create_file và 1 dòng trước content

if (!file_exist)
console.log('Run into create file');
create_file();
console.log('Read all file content');
content = read_all_files_content();
return content;
view raw example_2.ts hosted with ❤ by GitHub

— Yeah. Đó chính là vấn đề. Em vừa vô ý làm sai logic của ứng dụng rồi.

— ?!!
— Cụ thể thì em vừa làm cho hàm create_file() luôn được gọi, dù điều kiện file_exist đúng hay sai.

— Ah ok, em chỉ cần thêm ngoặc khi nào thêm log là được chứ gì

if (!file_exist){
console.log('Run into create file');
create_file();
}
console.log('Read all file content');
content = read_all_files_content();
return content;
view raw example_3.ts hosted with ❤ by GitHub

— Thế sao không thêm từ đầu đi cho đỡ nhầm? Em tiết kiệm vài milisecond viết ngoặc, với vài kb để làm gì? Logic sai còn có thể làm sập cả ứng dụng đó.

— Dạ. Ra là zay


Nhân dịp hôm qua có bạn hỏi mình, nhớ lại trước có combat mấy lần vụ này (khi bắt đầu áp dụng convention), nên mình tiện bịa ra bài này.

Cái này cũng được phần đông các anh em ủng hộ (VD1: Link, VD2: Link).

Mình còn tìm được 1 bài nói về lỗi SSL của một lập trình viên Apple do không dùng ngoặc ở đây.

Rõ ràng là lợi bất cập hại

Theo mình thì anh em nên cho ngoặc vào cho nó rõ ràng. Tiết kiệm 1 vài kí tự, không làm bạn nguy hiểm hơn, mà làm code bạn nguy hiểm hơn


Cảm ơn bạn, vì đã đọc bài.

Nhớ dùng ngoặc, bạn nhé 😉

Bình luận về bài viết này