Java - Biểu thức Switch

Xin chào các bạn, những nhà lập trình Java tương lai! Hôm nay, chúng ta sẽ khám phá một trong những tính năng thú vị được giới thiệu trong Java 12 và được cải thiện trong Java 14: Biểu thức Switch. Như một giáo viên khoa học máy tính thân thiện, tôi sẽ hướng dẫn các bạn trên hành trình này, ngay cả khi bạn chưa từng viết một dòng mã. Hãy căng cơ và bắt đầu nhé!

Java - Switch Expressions

Biểu thức Switch là gì?

Trước khi bước vào biểu thức switch, hãy dạo chơi nhanh để hiểu rõ về biểu thức switch là gì. Hãy tưởng tượng bạn đang ở một quán kem, và tùy thuộc vào lựa chọn hương vị của bạn, bạn sẽ nhận được topping khác nhau. Đó chính là điều gì một biểu thức switch làm trong lập trình – nó cho phép bạn thực hiện các đoạn mã khác nhau dựa trên các điều kiện khác nhau.

Bây giờ, biểu thức switch lấy khái niệm này và làm nó mạnh mẽ và ngắn gọn hơn. Chúng cho phép chúng ta xem toàn bộ khối switch như một biểu thức có thể trả về một giá trị. Như lên cấp từ một cốc kem thường đến một sundae sang trọng!

Cách Cũ: Biểu thức Switch Truyền thống

Hãy bắt đầu với một biểu thức switch truyền thống để thấy cách chúng ta đã làm việc như thế nào trước đây:

String day = "THỨ HAI";
String typeOfDay;

switch (day) {
case "THỨ HAI":
case "THỨ BA":
case "THỨ TỰ":
case "THỨ NĂM":
case "THỨ SÁU":
typeOfDay = "Ngày làm việc";
break;
case "THỨ BẢY":
case "CHỦ NHẬT":
typeOfDay = "Cuối tuần";
break;
default:
typeOfDay = "Ngày không hợp lệ";
}

System.out.println(typeOfDay);

Trong ví dụ này, chúng ta đang xác định xem một ngày là ngày làm việc hay cuối tuần. Nhận thấy rằng chúng ta cần sử dụng câu lệnh break để ngăn sụt xuống, và chúng ta phải khai báo typeOfDay ngoài khối switch.

Cách Mới: Biểu thức Switch

Bây giờ, hãy thấy cách chúng ta có thể đạt được cùng kết quả sử dụng biểu thức switch:

String day = "THỨ HAI";
String typeOfDay = switch (day) {
case "THỨ HAI", "THỨ BA", "THỨ TỰ", "THỨ NĂM", "THỨ SÁU" -> "Ngày làm việc";
case "THỨ BẢY", "CHỦ NHẬT" -> "Cuối tuần";
default -> "Ngày không hợp lệ";
};

System.out.println(typeOfDay);

WOW! Nhìn thấy mấy thế nào tươi sạch và ngắn gọn đó. Chúng ta đã kết hợp nhiều trường hợp, loại bỏ các câu lệnh break, và gán kết quả trực tiếp cho typeOfDay. Như là làm sạch phòng của bạn – đột nhiên mọi thứ trở nên sạch sẽ và gọn gàng!

Biểu thức Switch Sử dụng "case L ->" Labels

Cú pháp mũi tên (->) là một tính năng chính của biểu thức switch. Nó cho phép chúng ta cung cấp cách tiếp cận ngắn gọn để xác định cả case label và hành động liên quan. Hãy xem một ví dụ khác:

int dayNumber = 3;
String dayName = switch (dayNumber) {
case 1 -> "Thứ Hai";
case 2 -> "Thứ Ba";
case 3 -> "Thứ Tư";
case 4 -> "Thứ Năm";
case 5 -> "Thứ Sáu";
case 6 -> "Thứ Bảy";
case 7 -> "Chủ Nhật";
default -> "Số ngày không hợp lệ";
};

System.out.println("Ngày " + dayNumber + " là " + dayName);

Trong ví dụ này, chúng ta đang chuyển đổi số ngày thành tên ngày tương ứng. Cú pháp mũi tên khiến mỗi trường hợp trở thành một dòng đơn giản, dễ đọc. Như một cờ chỉ định trực tiếp đến câu trả lời đúng!

Biểu thức Switch Sử dụng "case L:" Statements và Câu lệnh yield

Đôi khi, bạn có thể cần làm nhiều hơn chỉ trả về một giá trị đơn giản trong biểu thức switch của bạn. Đó là nơi câu lệnh yield có tác dụng. Như là nói, "Tôi đã hoàn thành việc tính toán của mình, đây là câu trả lời cuối cùng!"

Hãy xem một ví dụ:

int month = 8;
String season = switch (month) {
case 12, 1, 2:
yield "Đông";
case 3, 4, 5:
yield "Xuân";
case 6, 7, 8:
yield "Hè";
case 9, 10, 11:
yield "Thu";
default: {
String message = "Tháng không hợp lệ: " + month;
System.out.println(message);
yield "Không rõ";
}
};

System.out.println("Mùa của tháng " + month + " là " + season);

Trong ví dụ này, chúng ta đang xác định mùa dựa trên tháng. Nhận thấy rằng chúng ta sử dụng yield để trả về giá trị, đặc biệt trong trường hợp default nơi chúng ta làm thêm một chút xử lý.

Sử dụng Nâng cao: Biểu thức Trong Case Labels

Một trong những tính năng tuyệt vời nhất của biểu thức switch là bạn có thể sử dụng biểu thức trong case labels. Như là để cho biểu thức switch của bạn một siêu sức mạnh! Dưới đây là một ví dụ:

record Person(String name, int age) {}

Person person = new Person("Alice", 25);

String lifeStage = switch (person) {
case Person p when p.age() < 13 -> "Trẻ con";
case Person p when p.age() >= 13 && p.age() < 20 -> "Người trẻ";
case Person p when p.age() >= 20 && p.age() < 60 -> "Người lớn";
case Person p when p.age() >= 60 -> "Người cao tuổi";
default -> "Không rõ";
};

System.out.println(person.name() + " là một " + lifeStage);

Trong ví dụ này, chúng ta sử dụng một record (một tính năng thú vị khác của Java) để đại diện cho một người, và sau đó sử dụng biểu thức switch với các điều kiện phức tạp để xác định giai đoạn cuộc sống của họ. Như có một người hướng dẫn cuộc sống cá nhân trong mã của bạn!

Kết luận

Biểu thức switch là một công cụ mạnh mẽ trong Java có thể làm cho mã của bạn dễ đọc hơn, ngắn gọn hơn và ít lỗi hơn. Như lên cấp từ một chiếc điện thoại bật lật đến một chiếc smartphone – đột nhiên, bạn có thể làm nhiều hơn nhiều hơn với ít nỗ lực hơn!

Nhớ rằng, lập trình là về việc luyện tập. Vì vậy, đừng sợ thử nghiệm với các khái niệm này. Thử tạo ra biểu thức switch của riêng bạn, chơi với các tình huống khác nhau và nhất định là hãy thích thú nó!

Khi chúng ta kết thúc, dưới đây là bảng tóm tắt các phương pháp chúng ta đã thảo luận:

Phương pháp Mô tả
-> Cú pháp mũi tên cho các case label và hành động ngắn gọn
yield Câu lệnh để trả về một giá trị từ biểu thức switch
case L when condition Khớp mẫu trong các case label

Chúc mã của bạn luôn rõ ràng và may mắn!

Credits: Image by storyset