Như cái tiêu đề sock hàng, bài viết này chủ yếu nói về việc hạn chế sử dụng if else nhiều nhất có thể.
Viết nhiều if else là phù hợp cho những người mới bắt đầu. Còn khi đã đạt tới “trình” cao hơn, hãy luôn tìm mọi cách để loại bỏ đi các đoạn if else không cần thiết trong souce.
BẰNG CÁCH NÀO?. Đây, một vài cách có thể áp dụng!.
1. Chúng ta có return
Sử dụng if else nhiều lần gần như là vấn đề mà bất kì Junior Developer nào cũng gặp phải. Cùng xem xét ví dụ dưới đây:
public void checkConditionSomething(int input) { if (input > 10) { // Do something in case greater than 10 } else { // Do some something } }
Code như này thường là có code của Junior, suy nghĩ đơn giản. Nếu này thì làm gì, ngược lại thì làm gì. Viết kiểu này tốt cho người mới bắt đầu vì dễ hiểu, dễ áp dụng.
Tuy nhiên, nên nhớ là ta vẫn còn return, một return sẽ đổi được một else. Nhìn còn professional khi viết các function nhỏ.
public void checkConditionSomething(int input) { if (input > 10) { return } // Do something like else }
Trường hợp logic thực thi ở if và else chỉ là single (gán, so sánh, return giá trị). Cách viết chuẩn mực, gọn gàng.
public boolean checkConditionSomething(int input) { // Khỏi cần if else source vẫn đẹp như thường return input > 10 ? true : false; }
Còn viết function sao cho tốt thì có thể tham khảo bài viết về function – viết sao cho tốt tại Kieblog
2. Return thay cho sử dụng if else thừa
Cũng là một cách khác, tuy nhiên thay vì sử dụng if else với else cuối cùng, ta có thể return ngay lập tức giá trị đó.
public String getStringValue(int input) { String value = ""; // Một đoạn if else dài loằng ngoằng if (input == 0) { value = "Kie"; } else if (input == 1) { value = "blog"; } else { value = "Kieblog"; } return value; }
If else kiểu này thì thật sự là thảm họa. Tuy nhiên, lúc ngồi nghĩ về logic viết như thế này có thể chấp nhận được. Nhưng sau đó thì sao?.
Khi maintainance, có thể bỏ bớt else bằng cách return giá trị default.
public String getStringValue(int input) { // Không còn else, source đẹp, dễ hiểu // Không mất công decleare variable if (input == 0) return "Kie"; if (input == 1) return "blog"; return "Kieblog"; }
3. Bỏ if else dùng dictionary
Ngoài sử dụng if else ta còn có thể sử dụng Dictionary để thay thế cho các block if else.
public String getStringValue(int input) { String value = ""; // Một đoạn if else dài loằng ngoằng if (input == 0) { value = "Kie"; } else if (input == 1) { value = "blog"; } else { value = "Kieblog"; } return value; }
Có thể sử dụng Dictionary như sau:
public String getStringValue(int input) { // Dùng dictionary cũng là một cách, đẹp source ra hẳn var operations = new Dictionary<string, Action>(); operations[0] = () => { //Do something } operations[1] = () => { // Do something } }
Sử dụng if else quá nhiều lần không những không làm rõ được nội dung đoạn source. Ngược lại còn làm rối tung rối mù lên. Tuy thuận tiện khi viết source logic lần đầu, nhưng nên thay đổi để bỏ bớt khi refactor source lần sau.
Viết cẩn thận chứ không em út sau đọc nó chửi sml ra.
4. Tham khảo
- How to replace many if statements in Java
- Refactoring If-else statement
- Câu lệnh rẽ nhánh (if else) trong Java
Cảm ơn vì đã đọc bài, thấy hay thì chia sẻ nha. Happy coding!