Quay lại
Featured image of post [Clean Code là gì] Quy tắt với biến (variable)

[Clean Code là gì] Quy tắt với biến (variable)

Các quy tắt khi làm việc với biến (variable) trong Clean Code thế nào?

[2] Quy tắc với biến (variable)

Thật sự việc suy nghĩ đặt tên biến là 1 trong những việc khá mất thời gian, dễ gây bực bội nhất 😄.

Đôi khi phải vò đầu bức tóc để tìm ra 1 tên biến sao cho phù hợp, dễ đọc, dễ hiểu nhất.

Vậy phải làm sao để đặt tên biến cho phù hợp nhỉ, các bạn đọc các quy tắc dưới đây để có cách đặt tên biến sao cho chuẩn hóa nhé.

🌟 Tên biến phải có nghĩa:

Vậy “có nghĩa” là như thế nào? Có nghĩa thì phải đáp ứng các nguyên tắc sau đây:

  • Tên biến phải trả lời được tất cả các câu hỏi lớn.
  • Nó phải nói với bạn được là:
    • Tại sao nó tồn tại?
    • Làm thế nào để sử dụng biến này?
    • Loại dữ liệu của nó là gì? (ý này là tùy chọn, không bắt buộc, nhưng khuyến khích)
  • Nếu tên biến phải thêm comment để hiểu được, thì không đáp ứng được ý nghĩa dễ hiểu.

Ví dụ:

// Bad
int d; // elapsed time in days

// Good
int elapsedTimeInDays;

-----------------------------------------------------------

// Bad
var product = products.filter(item => item.active); 
// => Nhìn tưởng có 1 product mà thôi.

// Good
var activeProducts = products.filter(item => item.active);
/* => Nhìn tên biến ta hiểu ngay là biến 
        chứa 1 danh sách các products active = true.
*/

🌟 Tên biến phải dễ dàng tìm kiếm:

Có 1 sự thật là khi bạn làm dự án:

  • Bạn hay tập trung vào để làm các tính năng chạy được, chạy ngon lành trước.
  • Không quan tâm đến các cách clean code, đặt tên biến sao cho dễ hiểu.
  • Ví dụ cách viết như sau:
for (int j = 0; j < 34; j++) {
    s += (t[j] * 4) / 5;
}

Đến 1 ngày, khách hàng yêu cầu thay đổi 1 vài chỗ theo ý họ:

  • Bạn mò mẫm trong đống code cũ của bạn 😔
  • Bây giờ phải ngồi nhớ lại code này nó đang làm gì ta?
    • Tại sao lại là lặp từ 0 đến 34?
    • t là gì? s là gì?
    • Tại sao lại nhân với 4 rồi chia cho 5?
  • Và bạn mặc kệ, sửa cho chạy tiếp đã.

Đến 2 năm sau, khách hàng lại yêu cầu bạn thay đổi chỗ này nữa thì sao 🤭

  • Bạn không nhớ nó nằm chỗ nào trong đống code hỗn độn 😆
  • Bạn không biết làm sao để tìm kiếm ra chỗ code này cả.
  • Bạn chỉ được 1 thông tin là đổi 34 thành 20.
  • Bạn thử search toàn bộ dự án với số 34 🥴.
  • Kết quả là khoảng hơn 1000 kết quả với số 34 🙇‍♂️.

Thật sự là ác mộng phải không 🥶, mình đã từng gặp tình trạng này khi tiếp nhận dự án từ người khác, không biết phải bắt đầu từ đâu luôn 🥵

Vậy chỗ ở trên ta có thể viết lại như sau:

int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;

for (int = 0; j < NUMBER_OF_TASKS; j++) {
    int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
    int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
    sum += realTaskWeeks;
}

Nhìn dễ hiểu khủng khiếp, không thể nào tin được mình đã có thể code được như vậy 😍

Vậy hãy cố gắng viết code sao cho dễ đọc, dễ hiểu nhé các bạn 😉

🌟 Tên biến phải đọc được (phát âm được):

Phát đọc (phát âm) được nghĩa là ta có thể đọc nó thành lời.

Ví dụ dayOfBirth, firstName, lastName… chứ không phải là: daOBth, fNm, lNa

Các bạn cũng thấy được sự khác nhau ở trên đúng rồi, khác nhau lắm.

Nó khác chỗ khi chúng ta có thể đọc được tên biến dễ dàng thì chúng ta có thể hiểu được ngay ý nghĩa, mục đích của tên biến đó để làm gì, cách sử dụng nó thế nào, loại dữ liệu của nó…

Ví dụ:

// Bad
var tmStmp = Date.now();

// Good
var currentTimeStamp = Date.now();
-------------------------------------------------------
// Bad
String msg = 'Message content';

// Good
String message = 'Message content';

🌟 Tên biến phải thể hiện được giá trị chứa trong đó:

Ý nãy phía trên mình có giải thích, thật ra mục đích của việc này là:

  • Bớt thời gian suy nghĩ của chúng ta khi đọc tên biến.
  • Đọc vô là hiểu liền:
    • Biến đó để làm gì.
    • Dùng nó thế nào: gán string hay int hay array…
    • Nó chứa gì trong đó :v
  • Để thời gian suy nghĩ về biến ta hay suy nghĩ về những cái khác, như thuật toán để đáp ứng được yêu cầu tính năng mới…

Ví dụ:

// Bad
const MINUTE = 10;

// Good
const MAX_EXECUTE_MINUTES = 10;

-----------------------------------------------

// Bad
var a = 50; 

// Good
var numberOfObjectInClass = 50;

🌟 Tên biến theo chuẩn camelCase:

Tùy vào ngôn ngữ mà bạn sử dụng có quy ước đặt tên biến riêng, nhưng đa phần các ngôn ngữ đề khuyên nên đặt tên biến theo chuẩn camelCase.

Cách đặt tên biến camelCase tương tự như cách viết của chữ camelCase:

  • Chữ đầu tiên của từ đầu tiên thì viết thường
  • Chữ đầu tiên của các từ phía sau thì viết hoa.

Ví dụ:

const numberOfObjectInClass = 100;
var firstName = 'Nguyen';
int productQuantity = 10;

🌟 Nên ưu tiên dễ hiểu hơn là ngắn gọn:

Tất nhiên, nếu có thể thì nên đặt tên ngắn gọn vẫn hơn, nhưng phải dễ hiểu nhé 🙂

Nếu trường hợp bạn không nghĩ được tên nào vừa ngắn gọn, vừa dễ hiểu thì nên đặt tên dài 1 chút nhưng có thể hiểu được thì nên ưu tiên tên dài nhé 😉

Ví dụ:

// Bad
const WORK_DAYS = 5;

// Good, đọc thấy rõ nghĩa, dễ hiểu hơn.
const WORK_DAYS_PER_WEEK = 5;

// Bad
const TIME_FORMAT = 'HH:mm';

// Good
const DEFAULT_TIME_FORMAT = 'HH:mm';
const STORE_TIME_FORMAT = DEFAULT_TIME_FORMAT;
const TIME_PICKER_FORMAT = 'hh:mm';

🌟 Hạn chế viết sai chính tả:

Lỗi khá phổ biến của các dev mình là viết tên biến bằng tiếng Anh, nhưng lại sai chính tả. Hậu quả của việc sai chính tả sẽ như sau:

  • Khó khăn trong việc đọc hiểu ý nghĩa của biến.
  • Khó tìm kiếm về sau.
  • Khó chịu cho đồng nghiệp khi làm việc chung.

Vì thế nên chúng ta dành chút thời gian để tra từ điển, hoặc viết thử ý nghĩa trên google translate xem có đúng nghĩa chưa nhé.

Việc đặt tên biến mình hay làm là:

  • Suy nghĩ về ý nghĩa của tên biến bằng tiếng Việt.
  • Dịch các từ đó sang tiếng Anh, tra xem đúng ngữ pháp chưa.
  • Gõ các từ tiếng Anh đó lên Google Translate xem đúng nghĩa chưa.
  • Chuyển qua lại giữa tiếng Anh ↔ tiếng Việt xem đúng ngữ pháp chưa (tương đối thôi)
  • Ghép các từ đó lại thành 1 biến hoàn chỉnh.

-> Phần tiếp theo mình sẽ nói chi tiết về cách quy tắc với hàm (function) nhé.

Phần tiếp theo » [Clean Code là gì] Quy tắt viết hàm (function)

Bình luận sử dụng Facebook hoặc Google bên dưới nhé :)