Java - Sử dụng Toán tử instanceof để Khớp Mẫu

Xin chào mọi người, những nhà thuật toán Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình phiêu lưu vào thế giới khớp mẫu trong Java. Đừng lo lắng nếu bạn mới bắt đầu học lập trình; tôi sẽ là người hướng dẫn bạn, và chúng ta sẽ khám phá chủ đề này bước به bước. Vậy hãy nắm chắc chiếc cây cơ sở trí tuệ của bạn (bàn phím) và bắt đầu!

Java - Pattern Matching

Những gì là Khớp mẫu?

Trước khi chúng ta bước sâu vào chi tiết, hãy cùng hiểu rõ về khớp mẫu là gì. Hãy tưởng tượng bạn là một cảnh sát cần phải xác định các vật phẩm trong một hộp bí ẩn. Khớp mẫu như có một chiếc kính lúp siêu thông minh giúp bạn nhanh chóng xác định và làm việc với các vật phẩm này. Trong Java, đây là tính năng cho phép chúng ta kiểm tra xem một đối tượng có phải là kiểu cụ thể nào và trích xuất thông tin từ nó trong một lần di chuyển.

Toán tử instanceof: Công cụ ma thuật của chúng ta

Trong Java, toán tử instanceof là đồng minh đáng tin cậy của chúng ta cho khớp mẫu. Nó giống như một phép thuật kiểm tra xem một đối tượng có phải là một thể hiện của lớp cụ thể hoặc thực hiện giao diện cụ thể hay không.

Cách cũ: Trước Java 16

Hãy bắt đầu với cách chúng ta đã làm việc trước khi Java 16 ra mắt và tràn đầy lứt bánh ma thuật:

Object mystery = "Hello, Pattern Matching!";

if (mystery instanceof String) {
    String message = (String) mystery;
    System.out.println("Thông điệp là: " + message.toUpperCase());
} else {
    System.out.println("Nó không phải là một chuỗi!");
}

Trong ví dụ này, chúng ta kiểm tra xem đối tượng mystery của chúng ta có phải là một String. Nếu có, chúng ta ép nó thành một String và sau đó sử dụng nó. Nó hoạt động, nhưng có vẻ hơi tạp nham, như cố gắng mở cửa khi cầm đồ.

Cách mới: instanceof Mạnh mẽ hơn (Java 16+)

Bây giờ, hãy xem cách Java 16 đã làm cho cuộc sống của chúng ta dễ dàng hơn với toán tử instanceof mạnh mẽ hơn:

Object mystery = "Hello, Pattern Matching!";

if (mystery instanceof String message) {
    System.out.println("Thông điệp là: " + message.toUpperCase());
} else {
    System.out.println("Nó không phải là một chuỗi!");
}

Nhìn thế nào! Chúng ta đã kết hợp kiểm tra loại và khai báo biến trong một dòng. Như ma thuật, nhưng đó chỉ là Java thông minh!

Thực hành: Một ngày tại Sở thú

Để thực sự hiểu về khớp mẫu, hãy tưởng tượng chúng ta là những người chăm sóc sở thú trong một ngày. Chúng ta có các loài động vật khác nhau và cần phải cho ăn đúng cách.

class Animal {}
class Lion extends Animal {
    void roar() { System.out.println("Roar!"); }
}
class Elephant extends Animal {
    void trumpet() { System.out.println("Toot!"); }
}
class Monkey extends Animal {
    void chatter() { System.out.println("Ooh ooh ah ah!"); }
}

public class Zoo {
    public static void main(String[] args) {
        Animal[] animals = {new Lion(), new Elephant(), new Monkey()};

        for (Animal animal : animals) {
            if (animal instanceof Lion lion) {
                System.out.println("Cho ăn thịt cho sư tử.");
                lion.roar();
            } else if (animal instanceof Elephant elephant) {
                System.out.println("Cho ăn hạt dẻ cho hươu.");
                elephant.trumpet();
            } else if (animal instanceof Monkey monkey) {
                System.out.println("Cho ăn chuối cho khỉ.");
                monkey.chatter();
            }
        }
    }
}

Trong tình huống sở thú này, chúng ta sử dụng khớp mẫu để xác định từng loài động vật và tương tác với nó một cách thích hợp. Có gì đẹp nhất khi chúng ta có thể kiểm tra loại và gọi phương thức cụ thể trong một cú di chuyển mượt mà?

Lợi ích của Khớp mẫu

  1. Mã sạch hơn: Giảm thiểu nhu cầu ép kiểu rõ ràng.
  2. Mã an toàn hơn: Giúp tránh ClassCastException bằng cách kết hợp kiểm tra instanceof và ép kiểu.
  3. Dễ đọc hơn: Làm rõ ý định của mã trong một cái nhìn.

Lời cảnh báo

Mặc dù khớp mẫu rất mạnh mẽ, hãy nhớ lời khuyên của Chú Bé: "Với quyền lớn đến đến trách nhiệm lớn." Sử dụng nó một cách khôn ngoan và đừng quá sử dụng. Đôi khi, đa hình thực sự có thể là lựa chọn tốt hơn.

Thực hành để hoàn hảo

Bây giờ là lượt của bạn! Thử tạo ra các tình huống của riêng bạn nơi khớp mẫu có thể là hữu ích. có lẽ là một máy tính hình học đóng vai trò khác nhau cho các hình tròn, vuông và tam giác? Hoặc một trình xử lý tin nhắn xử lý các thư điện tử, tin nhắn và bài đăng mạng xã hội một cách khác nhau?

Kết luận

Khớp mẫu với toán tử instanceof như thêm một phép thuật mới vào sổ thuật toán Java của bạn. Nó làm cho mã của bạn sạch hơn, an toàn hơn và trình bày tốt hơn. Khi bạn tiếp tục hành trình với Java, bạn sẽ tìm thấy nhiều nơi nữa nơi tính năng này có thể đáng kinh ngạc đến đó.

Nhớ rằng, lập trình là một nghệ thuật đồng thời với khoa học. Bạn càng thực hành, bạn càng thể vận động các tính năng mạnh mẽ này một cách tốt. Vậy hãy tiếp tục lập trình, tiếp tục thử nghiệm và quan trọng nhất, hãy tận hưởng niềm vui!

Chúc các bạn lập trình vui vẻ, những nhà thuật toán Java tương lai! ?‍♂️?

Phương thức Mô tả
instanceof Kiểm tra xem một đối tượng có phải là một thể hiện của lớp cụ thể hoặc thực hiện giao diện cụ thể
getClass() Trả về lớp thời điểm chạy của đối tượng
equals() So sánh hai đối tượng với nhau để xem có bằng nhau hay không
hashCode() Trả về giá trị băm cho đối tượng
toString() Trả về một chuỗi đại diện cho đối tượng

Những phương thức này là cơ sở cho lập trình hướng đối tượng của Java và thường được sử dụng cùng với các kỹ thuật khớp mẫu. |

Credits: Image by storyset