Như các bạn đã biết, khi bắt đầu với lập trình, thì chúng ta sẽ phải tập cách viết một câu điều kiện. Lệnh If/Else dường như là một trong những câu lệnh không thể thiếu, thật khó tưởng tượng nếu thế giới lập trình không có if/else. Trong một số dự án mình đã từng làm, mình đã cố gắng giảm thiểu câu lệnh if/else vì nó khiến người review code khá là rối nếu có quá nhiều lệnh if/else, và thực sự đã có một số cách rất tốt để thay thế, nó vẫn sẽ giúp hệ thống chạy ổn định, dễ đọc và hơn hết là bảo trì tốt hơn.
Một ví dụ về If/Else
def love
a_boy_handsome_1 = Boy.get_a_boy_handsome_1
a_boy_handsome_2 = Boy.get_a_boy_handsome_2
a_girl = Girl.get_a_girl
if a_boy_handsome_1 >= 100 || a_boy_handsome_2 >=100
very_happy = a_boy_handsome_1 +a_boy_handsome_2
else
a_baby_boy = a_boy_handsome_1 + a_girl
a_baby_girl = a_boy_handsome_2 + a_girl
end
end
Khi đọc đoạn ví dụ trên có thể bạn hơi bối rối về code lẫn nội dung của nó. Ở đây bạn sẽ có một số câu hỏi với đoạn code trên:
- tại sao chúng ta lại kiểm tra boy > 100 để làm gì, nó có ý nghĩa gì, có gì đặc biệt ở con số 100 này?
- tại sao lại very_happy khi a_boy_handsome_1 +a_boy_handsome_2?
- Điều gì sẽ xảy ra đối với trường hợp else xảy ra và tại sao nó được thực hiện?
Quick Refactoring
Bây giờ mình sẽ viết lại câu lệnh if/else này nhưng có một số thay đổi như sau:
- Cứ mỗi đoạn điều kiện ta sẽ tạo một phương thức cho nó, mình chỉ cần gọi đến khi cần
def love
if is_gay?
set_very_happy
else
a_baby_born
end
private
def a_boy_1
Boy.get_a_boy1
end
def a_boy_2
Boy.get_a_boy2
end
def a_girl
Girl.get_a_girl
end
def is_gay?
a_boy_1 >= 100 || a_boy_2 >=100
end
def set_very_happy
very_happy = a_boy_1 +a_boy_2
end
def born_baby
a_baby_boy = a_boy_1 + a_girl
a_baby_girl = a_boy_2 + a_girl
end
end
Sẽ đơn giản hơn nữa nếu ta làm như sau:
def love
is_gay? ? set_very_happy : born_baby
private
#.....
Results
Sau khi refactor, chúng ta đã hoàn toàn thay thế if/else phức tạp thành 1 câu lệnh khá đơn giản mà bất cứ lập trình viên nào cũng hiểu.
is_gay? ? set_very_happy : born_baby
Ngoài ra nó sẽ giải quyết một số thắc mắc phía trên
- tại sao chúng ta lại kiểm tra boy > 100 để làm gì, nó có ý nghĩa gì, có gì đặc biệt ở con số 100 này? trả lời: Nó kiểm tra chàng trai đó có gay hay ko (lớn hơn 100 thì gay rồi)
- tại sao lại very_happy khi a_boy_handsome_1 +a_boy_handsome_2? trả lời: Đương nhiên sẽ vui vẻ nếu 2 chàng trai ấy ấy rồi nhỉ?
- Điều gì sẽ xảy ra đối với trường hợp else xảy ra và tại sao nó được thực hiện?
- trả lời: đơn giản, nếu không gay thì sẽ được làm father
Trên chỉ là một vài ví dụ nhỏ cho việc sử dụng If/else. Hi vọng sẽ giúp được các bạn trong việc code dễ hiểu cũng như DRY hơn