Pola Record Bertingkat
Cocokkan data yang bertingkat dalam.
Pola Record Bertingkat adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Pola Rekaman Bertingkat
Pola rekaman dapat disusun bertingkat: komponen yang juga merupakan rekaman dapat dibongkar di dalam pola luar. Dengan demikian, data yang strukturnya dalam dapat dicocokkan dalam satu ekspresi.
Model Data Bertingkat
Bayangkan sebuah Line yang tersusun dari dua rekaman Point. Rekaman bagian dalam merupakan kandidat alami untuk pola bertingkat.
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);
}
}Pembongkaran Satu Tingkat
Pola datar mengikat kedua komponen Point, tetapi membiarkannya tetap utuh.
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);
}
}
}Lebih Mendalam
Ganti Point s bagian dalam dengan pola rekamannya sendiri untuk langsung mencapai koordinat: 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);
}
}
}Kedalaman Apa Pun
Penyusunan bertingkat dapat sedalam struktur data Anda. Setiap tingkat mengikat seluruh komponen atau membongkarnya lebih lanjut, sehingga bentuk pola persis mencerminkan bentuk struktur.
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);
}
}
}Mencampur var dan Tipe
Dalam pola bertingkat, Anda dapat dengan bebas mencampur tipe eksplisit dan var. Gunakan var untuk komponen yang hanya diteruskan, dan gunakan tipe eksplisit ketika kejelasan lebih penting.
Penyusunan Bertingkat dalam Pernyataan Pemilihan
Pola bertingkat sangat ekspresif dalam pernyataan pemilihan, karena setiap cabang dapat menjelaskan bentuk data yang tepat.
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))));
}
}Seluruh Pencocokan Harus Berhasil
Pola bertingkat hanya cocok jika setiap tingkat cocok. Jika ada komponen yang tipenya berbeda dari yang diharapkan subpola, seluruh pencocokan gagal dan tidak ada variabel yang diikat.
Pertimbangan Keterbacaan
Penyusunan bertingkat yang dalam memang kuat, tetapi dapat sulit dibaca. Jika pola menjadi terlalu besar, pertimbangkan untuk membongkar satu tingkat lalu menangani sisanya dengan logika terpisah.
Penjaga untuk Ikatan Bertingkat
Karena pola bertingkat mengekspos nilai bagian dalam sebagai variabel lokal, satu penjaga when dapat merujuk ke bidang dari beberapa tingkat sekaligus.
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))));
}
}Contoh Lengkap
Hitung titik tengah sebuah garis dengan membongkar kedua titik ujungnya.
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))));
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang pola rekaman bertingkat.
Rangkuman
Anda telah mempelajari pola rekaman bertingkat.
- Komponen rekaman yang juga merupakan rekaman dapat dibongkar langsung di dalam pola.
- Penyusunan bertingkat dapat mencapai kedalaman apa pun dan mencampur tipe eksplisit dengan
var. - Pencocokan hanya berhasil jika setiap tingkat cocok.
- Ikatan bagian dalam dapat digunakan bersama-sama dalam penjaga dan isi cabang.
Belajar Java dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Record Bertingkat” gratis?
Ya — teks lengkap “Pola Record Bertingkat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Record Bertingkat”?
Cocokkan data yang bertingkat dalam. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pola Record Bertingkat” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pencocokan Pola untuk instanceof
- Pola Record
- Pola Record Bertingkat
- Pola dalam switch