Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Khi làm việc với switch statement, các bạn sẽ hay gặp những vấn đề sau:
Vấn đề thứ nhất là chúng ta quên khai báo break statement: điều này có nghĩa code chúng ta sẽ không thoát khỏi switch statement sau khi match case đầu tiên mà sẽ thực thi tiếp những case tiếp theo, ví dụ như:
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int a =1;int b =2;switch(a + b){case2:System.out.println("Khanh");break;case3:System.out.println("Huong Dan Java");case4:System.out.println("Lap Trinh Java");default:System.out.println("Hello");break;}}}
Vấn đề thứ hai là nếu các bạn muốn trong trường hợp giá trị của biến với các giá trị khác nhau a và b thì xử lý cùng một đoạn code. Chúng ta sẽ viết code như sau:
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int a =1;int b =2;switch(a + b){case2:System.out.println("Khanh");break;case3:System.out.println("Huong Dan Java");break;case4:System.out.println("Huong Dan Java");break;default:System.out.println("Hello");break;}}}
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int a =1;int b =2;switch(a + b){case2:System.out.println("Khanh");break;case3:case4:System.out.println("Huong Dan Java");break;default:System.out.println("Hello");break;}}}
Để giải quyết những vấn đề trên, từ Java 12, các bạn có thể viết switch statement với những cải tiến như sau:
Đối với vấn đề thứ nhất, Java 12 hỗ trợ chúng ta cách viết switch statement giống như lambda expression, ví dụ như:
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int a =1;int b =2;switch(a + b){case2->System.out.println("Khanh");case3->System.out.println("Huong Dan Java");case4->System.out.println("Lap Trinh Java");default->System.out.println("Hello");}}}
Đối với vấn đề thứ 2 thì các bạn có thể viết lại switch statement như sau:
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int a =1;int b =2;switch(a + b){case2->System.out.println("Khanh");case3,4->System.out.println("Huong Dan Java");default->System.out.println("Hello");}}}
Nếu các bạn muốn thêm code để xử lý business logic trong mỗi case của switch statement thì các bạn cần upgrade lên Java 13, sau đó thêm code và sử dụng từ khóa yield để return lại giá trị mà mình mong muốn. Ví dụ như sau:
package com.huongdanjava;publicclassSwitchExample{publicstaticvoid main(String[] args){int n =1;var message =switch(n){case1->"Khanh";case2->"Huong Dan Java";case3->"Lap Trinh Java";default->"Hello";};System.out.println(message);}}