Java Academy · leksjon

Record-mønstre

Dekomponer records i mønstre

Leksjon 2 av 413 trinn

Record-mønstre er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Record-mønstre

Et record-mønster matcher en record og destrukturerer den ved å binde komponentene til variabler i ett trinn. De trenger ikke lenger å kalle hver accessor manuelt.

En record som skal destruktureres

Begynn med en enkel record. Komponentene er det et mønster kan hente ut.

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());
    }
}

Destrukturering med instanceof

I stedet for instanceof Point p og deretter p.x() kan De skrive instanceof Point(int x, int y) for å binde x og y direkte.

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));
        }
    }
}

Komponenter blir lokale variabler

Navnene inne i mønsteret (x, y) er nye lokale variabler som inneholder recordens komponentverdier. De velger navnene selv; de trenger ikke samsvare med recorden.

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);
        }
    }
}

Bruk av var i mønstre

De kan skrive var for en komponent og la kompilatoren utlede typen. Dette er praktisk når typene er lange.

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);
        }
    }
}

Mønstre i switch

Record-mønstre fungerer også i switch, slik at case-grenene leses som datastrukturer.

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)));
    }
}

Match med typeinferens

Komponenttypene i mønsteret må være kompatible med recordens deklarerte typer. Det tryggeste er å bruke den eksakte typen eller var.

Kombinere med guards

Legg til en when-guard etter et record-mønster for å bare matche når de destrukturerte verdiene oppfyller en betingelse.

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)));
    }
}

Renere datatilgang

Record-mønstre er særlig nyttige når De bare trenger et par felt. De fjerner en kjede med accessor-kall og gjør de relevante dataene tydelige der matchingen skjer.

Null og record-mønstre

Som alle instanceof-mønstre er et record-mønster false for null. Destruktureringen skjer først når verdien er bekreftet å være en instans av recorden som ikke er null.

Et praktisk eksempel

Destrukturer for å beregne en verdi direkte fra komponentene.

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"));
    }
}

Kort kontroll

Test forståelsen av record-mønstre.

Oppsummering

De har lært record-mønstre.

  • De tester om verdien er en bestemt record-type og destrukturerer komponentene samtidig.
  • Komponentnavnene er nye lokale variabler som De velger selv; var utleder typene.
  • De fungerer både i instanceof og switch.
  • Som alle mønstre er de false for null.
Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Record-mønstre» gratis?

Ja – hele teksten i «Record-mønstre» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Record-mønstre»?

Dekomponer records i mønstre Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Record-mønstre»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Mønstergjenkjenning for instanceof
  2. Record-mønstre
  3. Nestede record-mønstre
  4. Mønstre i switch
← Tilbake til Java Academy