0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Clean Code #3: Viết và Tối ưu Điều Kiện (P2)

Đăng vào 1 tháng trước

• 3 phút đọc

Chủ đề:

#AppMobile

Clean Code #3: Viết và Tối ưu Điều Kiện (P2)

Trong phần 2 của bài viết về việc viết các điều kiện trong lập trình, chúng ta sẽ cùng tìm hiểu về cách làm sạch và tối ưu mã nguồn, giúp cho việc bảo trì và đọc mã trở nên dễ dàng hơn.

7. Tránh Số Ma Thuật (Magic Numbers)

🔴 Ví dụ Kém:

java Copy
if(age > 18) {
  // Thực hiện hành động
}

if(status == 2) {
  // Thực hiện hành động
}

🟢 Ví dụ Sạch:

java Copy
const int teenager = 16;
if(age > teenager) {
  // Thực hiện hành động
}

if(status == Status.Active) {
  // Thực hiện hành động
}

Sử dụng số ma thuật không cung cấp ngữ cảnh rõ ràng và có thể gây nhầm lẫn cho người đọc. Thay vào đó, hãy sử dụng hằng số với tên rõ ràng hoặc enum để tránh lỗi và tăng cường ý nghĩa mã nguồn. Điều này sẽ làm rõ ý định của bạn hơn và giúp code trở nên dễ duy trì hơn.

8. Điều Kiện Phức Tạp

🔴 Ví dụ Kém:

java Copy
if(car.Year > 2020 && (car.Make == "Mazda" || car.Make == "BMW") && car.Odometer > 100000 && (car.Vin.StartWith("V2") || car.Vin.StartWith("IA3"))) {
  // Thực hiện hành động
}

a. Sử dụng Biến Trung Gian

🟢 Ví dụ Sạch:

java Copy
const int MinRetirementAge = 55;
const int MinPensionEmploymentYears = 10;

bool eligibleForPension = employee.Age > MinRetirementAge
                          && employee.YearsEmployed > MinPensionEmploymentYears
                          && employee.IsRetired;

b. Đóng Gói Qua Function/Method

🟢 Ví dụ Sạch:

java Copy
if(ValidFileRequest(fileExtension, isActiveFile, isAdmin)) {
  // Thực hiện hành động
}

bool ValidFileRequest(String fileExtension, bool isActiveFile, bool isAdmin) {
  return (validFileType(fileExtension) && userIsAllowedToViewFile(isActiveFile, isAdmin));
}

Việc sử dụng các hàm với tên rõ ràng giúp người đọc dễ dàng hiểu được mục đích của đoạn mã mà không cần phải phân tích quá nhiều.

9. Ưu Tiên Đa Hình Hơn Enum Cho Hành Vi

🔴 Ví dụ Kém:

java Copy
void LoginUser(User user) {
  switch(User.status) {
    case Status.active:
        // Logic cho người dùng hoạt động
        break;
    case Status.inActive:
        // Logic cho người dùng không hoạt động
        break;
    case Status.locked:
        // Logic cho người dùng bị khóa
        break;
  }
}

🟢 Ví dụ Sạch:

java Copy
void LoginUser(User user) {
  user.Login();
}

Sử dụng đa hình giúp loại bỏ độ phức tạp và cải thiện khả năng mở rộng trong việc triển khai logic hành vi khác nhau cho các trạng thái khác nhau của người dùng.

10. Sử Dụng Cách Thức Khai Báo Nếu Có Thể

🔴 Ví dụ Kém:

java Copy
List<User> matchingUsers = new List<User>();

forEach(var user in users) {
  if(user.AccountBalance < minimumAccountBalance && user.Status == Status.Active) {
    matchingUsers.add(user);
  }
}
return matchingUsers;

🟢 Ví dụ Sạch:

java Copy
return users.Where(u => u.AccountBalance < minimumAccountBalance && u.Status == Status.Active);

Cách tiếp cận khai báo giúp giảm thiểu mã và làm cho mã dễ đọc và dễ hiểu hơn.

11. Ưu Tiên Điều Kiện Ngắn Gọn

🔴 Ví dụ Kém:

java Copy
if(userStatus == UserStatus.loggedIn) {
    // Thực hiện logic cho logged in
} else if (...) {
    // Thực hiện logic khác
}

🟢 Ví dụ Sạch:

java Copy
if(userStatus == UserStatus.tutorial) {
    AppState.isUserLoggedIn = false;
    return;
}
// Các điều kiện khác

Việc sắp xếp các điều kiện ngắn gọn lên trước giúp người đọc dễ dàng hơn trong việc tìm hiểu và xử lý logic.

12. Phương Pháp Dựa Trên Bảng

🔴 Ví dụ Kém:

java Copy
if(goldPrice < 20) {
  return 3.4560;
} else if (...) {
}

🟢 Ví dụ Sạch:

Bảng Lạm Phát:

InflationRateId MaximumPriceGold Rate
1 20 3.4660
2 30 4.2050
java Copy
return Repository.GetInflationRate(goldPrice);

Sử dụng phương pháp dựa trên bảng giúp mã dễ hiểu hơn và giảm thiểu việc thay đổi mã mỗi khi có thay đổi dữ liệu.

Kết Luận:

Viết mã sạch không chỉ giúp cho việc bảo trì mã dễ dàng hơn mà còn tăng cường khả năng đọc hiểu cho người khác. Hãy tránh sử dụng các số ma thuật, đơn giản hóa các điều kiện phức tạp và tận dụng sức mạnh của đa hình và phương pháp khai báo. Cảm ơn bạn đã theo dõi bài viết này. Nếu bạn thấy hữu ích, hãy để lại đánh giá và hẹn gặp lại trong phần tiếp theo! 🚀
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào