0Pricing
Java Academy · Lekcja

Wzorce rekordów

Destrukturyzowanie rekordów we wzorcach

Wzorce rekordów to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Wzorce rekordów

Wzorzec rekordu dopasowuje rekord i destrukturyzuje go, przypisując jego składowe do zmiennych w jednym kroku. Nie trzeba już ręcznie wywoływać każdego akcesora.

Rekord do destrukturyzacji

Proszę zacząć od prostego rekordu. Jego składowe to elementy, które może wyodrębnić wzorzec.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Point p = new Point(3, 4);
        System.out.println(p.x() + ", " + p.y());
    }
}

Destrukturyzacja z instanceof

Zamiast używać instanceof Point p, a następnie p.x(), można napisać instanceof Point(int x, int y), aby bezpośrednio przypisać wartości do x i y.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(3, 4);
        if (obj instanceof Point(int x, int y)) {
            System.out.println("Sum: " + (x + y));
        }
    }
}

Składowe stają się zmiennymi lokalnymi

Nazwy we wzorcu (x, y) to nowe zmienne lokalne przechowujące wartości składowych rekordu. Nazwy wybiera Pan/Pani samodzielnie — nie muszą odpowiadać nazwom w rekordzie.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(10, 20);
        if (obj instanceof Point(int a, int b)) {
            System.out.println("a=" + a + " b=" + b);
        }
    }
}

Używanie var we wzorcach

Można użyć var dla składowej, aby kompilator wywnioskował jej typ. Jest to przydatne, gdy typy są długie.

public class Main {
    record Pair(String key, Integer value) {}

    public static void main(String[] args) {
        Object obj = new Pair("age", 30);
        if (obj instanceof Pair(var key, var value)) {
            System.out.println(key + " = " + value);
        }
    }
}

Wzorce w switch

Wzorce rekordów działają również w instrukcji switch, dzięki czemu gałęzie case przypominają kształty danych.

public class Main {
    record Point(int x, int y) {}

    static String classify(Object obj) {
        return switch (obj) {
            case Point(int x, int y) when x == y -> "on diagonal";
            case Point(int x, int y) -> "at " + x + "," + y;
            default -> "not a point";
        };
    }

    public static void main(String[] args) {
        System.out.println(classify(new Point(5, 5)));
        System.out.println(classify(new Point(1, 2)));
    }
}

Dopasowanie z inferencją typu

Typy składowych we wzorcu muszą być zgodne z typami zadeklarowanymi w rekordzie. Bezpiecznym wyborem jest użycie dokładnego typu lub var.

Łączenie z warunkami

Po wzorcu rekordu można dodać warunek when, aby dopasowanie następowało tylko wtedy, gdy zdestrukturyzowane wartości spełniają określony warunek.

public class Main {
    record Temperature(double celsius) {}

    static String alert(Object o) {
        if (o instanceof Temperature(double c) && c > 38.0) {
            return "fever: " + c;
        }
        return "normal";
    }

    public static void main(String[] args) {
        System.out.println(alert(new Temperature(39.5)));
        System.out.println(alert(new Temperature(36.6)));
    }
}

Czytelniejszy dostęp do danych

Wzorce rekordów są szczególnie przydatne, gdy potrzebne jest tylko kilka pól. Eliminują łańcuch wywołań akcesorów i jasno pokazują istotne dane w miejscu dopasowania.

Null i wzorce rekordów

Podobnie jak wszystkie wzorce instanceof, wzorzec rekordu ma wartość false dla null. Destrukturyzacja następuje dopiero po potwierdzeniu, że wartość jest niepustą instancją rekordu.

Praktyczny przykład

Proszę przeprowadzić destrukturyzację, aby bezpośrednio obliczyć wartość ze składowych.

public class Main {
    record Rectangle(int width, int height) {}

    static int area(Object o) {
        if (o instanceof Rectangle(int w, int h)) {
            return w * h;
        }
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(area(new Rectangle(4, 5)));
        System.out.println(area("not a rect"));
    }
}

Szybkie sprawdzenie

Proszę sprawdzić swoje rozumienie wzorców rekordów.

Podsumowanie

Poznał(a) Pan/Pani wzorce rekordów.

  • Sprawdzają one typ rekordu i jednocześnie przeprowadzają destrukturyzację jego składowych.
  • Nazwy składowych są wybieranymi przez Pana/Panią nowymi zmiennymi lokalnymi; var pozwala wywnioskować typy.
  • Działają zarówno w instanceof, jak i w switch.
  • Podobnie jak wszystkie wzorce, mają wartość false dla null.

Często zadawane pytania

Czy lekcja „Wzorce rekordów” jest bezpłatna?

Tak — pełny tekst „Wzorce rekordów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce rekordów”?

Destrukturyzowanie rekordów we wzorcach Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wzorce rekordów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dopasowanie wzorców dla instanceof
  2. Wzorce rekordów
  3. Zagnieżdżone wzorce rekordów
  4. Wzorce w switch
← Powrót do Java Academy