×

Sử dụng Pattern Matching và Record trong Java 17+

Java 17 đánh dấu một bước phát triển quan trọng với sự giới thiệu và cải tiến của nhiều tính năng mới, trong đó có Pattern Matching (Khớp kiểu mẫu) và Record (Ghi chép). Những tính năng này không chỉ giúp cải thiện hiệu suất mà còn làm cho mã nguồn trở nên dễ hiểu và dễ duy trì hơn. Bài viết này sẽ đi sâu vào tìm hiểu cách sử dụng Pattern Matching và Record trong Java 17+.

Pattern Matching

Pattern Matching là một tính năng mạnh mẽ mới được thêm vào Java, giúp lập trình viên xử lý các cấu trúc dữ liệu phức tạp một cách dễ dàng và trực quan hơn. Trong Java 17, tính năng này đã được áp dụng cho instanceof, giúp cải thiện tính rõ ràng và đơn giản hóa cú pháp.

Khớp kiểu mẫu với instanceof

Ví dụ trước đây với instanceof:

if (obj instanceof String) {
    String str = (String) obj;
    System.out.println(str.length());
}

Còn đây là cách làm tương tự với Pattern Matching trong Java 17:

if (obj instanceof String str) {
    System.out.println(str.length());
}

Lợi ích rõ ràng là mã nguồn trở nên ngắn gọn, rõ ràng và dễ hiểu hơn. Biến str được định nghĩa ngay trong điều kiện if, loại bỏ việc phải ép kiểu tường minh và giảm thiểu lỗi tiềm ẩn.

Sử dụng với switch

Java 17 cũng bổ sung pattern matching cho cấu trúc switch, làm tăng khả năng hiện thực quyết định dựa trên kiểu dữ liệu của đối tượng.

switch (shape) {
    case null -> System.out.println("Shape is null");
    case Circle c -> System.out.println("Circle with radius: " + c.radius());
    case Rectangle r -> System.out.println("Rectangle with area: " + r.area());
    default -> throw new IllegalStateException("Unexpected value: " + shape);
}

Pattern Matching for switch giúp mã nguồn trở nên linh hoạt và mạnh mẽ hơn, dễ dàng mở rộng và bảo trì.

Record

Record là một trong những tính năng đáng chú ý nhất trong Java 17. Nó cung cấp một cách ngắn gọn và rõ ràng để định nghĩa các lớp chứa dữ liệu (data classes) bằng cách tự động thêm các phương thức phổ biến như equals(), hashCode()toString(), giúp lập trình viên tránh được những khối mã lặp đi lặp lại.

Khai báo Record

Dưới đây là một ví dụ về cách khai báo một record trong Java:

public record Person(String name, int age) {}

Với khai báo trên, Java tự động tạo ra:

  • Một constructor với các tham số nameage.
  • Các phương thức name()age() để lấy giá trị của các trường tương ứng.
  • Phương thức equals(Object o)hashCode().
  • Phương thức toString().

Sử dụng Record

Khi muốn tạo một đối tượng của record Person, có thể làm như sau:

Person person = new Person("Alice", 30);
System.out.println(person.name());  // Output: Alice
System.out.println(person.age());   // Output: 30
System.out.println(person);         // Output: Person[name=Alice, age=30]

Record thực sự tiện lợi cho các lớp chỉ chứa dữ liệu, giúp giảm thiểu lượng mã boilerplate và tăng tính minh bạch cho mã nguồn.

Kết Luận

Java 17 với Pattern Matching và Record mang đến những cải tiến đáng kể, giúp các nhà phát triển viết mã nguồn ngắn gọn hơn và dễ bảo trì hơn. Pattern Matching cung cấp cú pháp đơn giản và mạnh mẽ cho việc kiểm tra kiểu dữ liệu và ứng dụng logic một cách linh hoạt. Trong khi đó, Record giúp nhanh chóng định nghĩa các lớp chứa dữ liệu mà không phải viết đi viết lại những phương thức thông dụng. Những thay đổi này chắc chắn sẽ làm hài lòng cộng đồng lập trình viên Java và tạo ra mã nguồn chất lượng hơn.

Comments