Motifs d’enregistrements imbriqués
Faites correspondre des données profondément imbriquées
Motifs d’enregistrements imbriqués est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Motifs d'enregistrement imbriqués
Les motifs d'enregistrement peuvent être imbriqués : un composant qui est lui-même un enregistrement peut être déstructuré dans le motif externe. Cela permet de mettre en correspondance des données profondément structurées en une seule expression.
Un modèle de données imbriqué
Considérez une Line composée de deux enregistrements Point. Les enregistrements internes se prêtent naturellement à l'imbrication.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
public static void main(String[] args) {
Line line = new Line(new Point(0, 0), new Point(3, 4));
System.out.println(line);
}
}Déstructuration sur un niveau
Un motif plat lie les deux composants Point, mais les laisse entiers.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
public static void main(String[] args) {
Object obj = new Line(new Point(0, 0), new Point(3, 4));
if (obj instanceof Line(Point s, Point e)) {
System.out.println(s + " -> " + e);
}
}
}Aller plus loin
Remplacez les Point s internes par leur propre motif d'enregistrement pour accéder directement aux coordonnées : Line(Point(int x1, int y1), Point(int x2, int y2)).
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
public static void main(String[] args) {
Object obj = new Line(new Point(0, 0), new Point(3, 4));
if (obj instanceof Line(Point(int x1, int y1), Point(int x2, int y2))) {
double len = Math.hypot(x2 - x1, y2 - y1);
System.out.println("Length: " + len);
}
}
}À n'importe quelle profondeur
L'imbrication peut être aussi profonde que vos données. Chaque niveau lie soit un composant entier, soit le déstructure davantage, en reproduisant exactement la forme de la structure.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
record Drawing(Line first, String label) {}
public static void main(String[] args) {
Object obj = new Drawing(new Line(new Point(1, 2), new Point(3, 4)), "diag");
if (obj instanceof Drawing(Line(Point(var ax, var ay), var end), var label)) {
System.out.println(label + " starts at " + ax + "," + ay);
System.out.println("ends near " + end);
}
}
}Mélanger var et les types
Dans un motif imbriqué, vous pouvez librement mélanger les types explicites et var. Utilisez var pour les composants que vous transmettez simplement et des types explicites lorsque cela améliore la clarté.
Imbrication dans une instruction de sélection
Les motifs imbriqués sont particulièrement expressifs dans une instruction de sélection : chaque branche peut décrire une forme précise des données.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
static String describe(Object o) {
return switch (o) {
case Line(Point(var x1, var y1), Point(var x2, var y2)) when x1 == x2 -> "vertical";
case Line(Point p1, Point p2) -> "general line";
default -> "not a line";
};
}
public static void main(String[] args) {
System.out.println(describe(new Line(new Point(2, 0), new Point(2, 9))));
System.out.println(describe(new Line(new Point(0, 0), new Point(5, 5))));
}
}Toute la correspondance doit réussir
Un motif imbriqué ne correspond que si chaque niveau correspond. Si un composant est d'un type différent de celui attendu par son sous-motif, la correspondance globale échoue et aucune variable n'est liée.
Compromis en matière de lisibilité
Une imbrication profonde est puissante, mais peut devenir difficile à lire. Si un motif devient trop volumineux, envisagez de déstructurer un seul niveau et de traiter le reste avec une logique distincte.
Gardes sur les variables imbriquées
Comme les motifs imbriqués exposent les valeurs internes sous forme de variables locales, une seule garde when peut faire référence à des champs de plusieurs niveaux à la fois.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
static boolean isUnitStep(Object o) {
return o instanceof Line(Point(int x1, int y1), Point(int x2, int y2))
&& x2 - x1 == 1 && y2 - y1 == 1;
}
public static void main(String[] args) {
System.out.println(isUnitStep(new Line(new Point(0, 0), new Point(1, 1))));
System.out.println(isUnitStep(new Line(new Point(0, 0), new Point(2, 2))));
}
}Un exemple complet
Calculez le milieu d'une ligne en déstructurant ses deux extrémités.
public class Main {
record Point(int x, int y) {}
record Line(Point start, Point end) {}
static Point midpoint(Object o) {
if (o instanceof Line(Point(int x1, int y1), Point(int x2, int y2))) {
return new Point((x1 + x2) / 2, (y1 + y2) / 2);
}
return null;
}
public static void main(String[] args) {
System.out.println(midpoint(new Line(new Point(0, 0), new Point(4, 6))));
}
}Vérification rapide
Testez votre compréhension des motifs d'enregistrement imbriqués.
Récapitulatif
Vous avez appris les motifs d'enregistrement imbriqués.
- Un composant d'enregistrement qui est lui-même un enregistrement peut être déstructuré directement dans le motif.
- L'imbrication peut atteindre n'importe quelle profondeur et mélanger les types explicites avec
var. - La correspondance réussit uniquement si chaque niveau correspond.
- Les variables liées internes sont utilisables dans les gardes et dans le corps.
Questions Fréquemment Posées
La leçon « Motifs d’enregistrements imbriqués » est-elle gratuite ?
Oui — le texte complet de « Motifs d’enregistrements imbriqués » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Motifs d’enregistrements imbriqués » ?
Faites correspondre des données profondément imbriquées Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Motifs d’enregistrements imbriqués » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Correspondance de motifs avec instanceof
- Motifs d’enregistrements
- Motifs d’enregistrements imbriqués
- Motifs dans switch