Đôi khi trong code có quá nhiều if-else sẽ không thực sự tốt và gây rối cho người đọc. Có một số cách cơ bản mình tìm hiểu được sẽ loại bỏ if-else không cần thiết. Tất nhiên là tùy trường hợp không phải hoàn toàn nhé.
PHƯƠNG PHÁP 1: EARLY RETURN
Nếu bạn dịch tên phương pháp này ra tiếng Việt, thì bạn sẽ nhận được ý nghĩa là “Trả về sớm” thì bạn cũng có thể hiểu rằng phương pháp này sẽ làm gì đúng không.
ví dụ:
public boolean isValid(String condition) {
boolean result;
if (condition != null){
if (condition.equals("hello") {
result = true;
} else {
result = false;
}
} else {
result= false;
}
return result;
}
Hàm isValid ở trên chạy rất bình thường nhưng thực tế rất rối phải không? Cùng xử lý nó nhé:
public boolean isValid(String condition) {
if (condition == null) {
return false;
}
if (condition.equals("hello") {
return true
}
return false;
}
Bạn thấy sao?
PHƯƠNG PHÁP 2: SỬ DỤNG ENUMERATION
public String getLabel(int status) {
String label;
if (1 == status) {
label = "Pending";
} else if (2 == status) {
label = "Paid";
} else if (3 == status) {
label = "Success";
} else if (4 == status) {
label = "Failed";
}
return label;
}
Tất nhiên, nếu bạn là một “pro” thì chẳng viết như thế này. Nhưng thực tế, nó rất phổ biến.
Trước tiên chúng ta sẽ định nghĩa ra 1 enum, hãy đặt tên nó là StatusLabelEnum.
@Getter
@AllArgsConstructor
public enum StatusLabelEnum {
Padding(1, "Pending"),
Paid(2, "Paid"),
Success(3, "Success"),
Failed(4, "Failed"),
;
private int status;
private String label;
public static String getLabelByStatus(int status) {
for (StatusLabelEnum labelEnum : StatusLabelEnum.values()) {
if (labelEnum.getStatus() == status) {
return labelEnum.getLabel();
}
}
return "Unknown";
}
}
chúng ta có thể dễ dàng lấy status bằng cách.
public String getLabel(int status) {
return StatusLabelEnum.getLabelByStatus(status);
}
PHƯƠNG PHÁP THỨ 3: SỬ DỤNG OPTIONAL
public int getOrderStatus(UUID id) {
Order order = getOrderById(id);
if (order == null) {
return 1;
} else {
return order.getOrderStatus();
}
}
Nhìn cũng chấp nhận được nhưng để gọn hơn thì:
public int getOrderStatus(UUID id) {
Order order = getOrderById(id);
return Optional.ofNullable(order).map(Order::getOrderStatus).orElse(1);
}
Trên đây một số cách giúp tối ưu loại bỏ bớt if-else khi code mà các bạn có thể xem xét nhé.
Tham khảo khoá Java fullstack từ cơ bản cho người mới bắt đầu - Tại đây
Bình luận