Pola dalam switch
Gabungkan tipe sealed dan pola.
Pola dalam switch adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 dalam Pernyataan Pemilihan
Pernyataan pemilihan telah berkembang dari mencocokkan konstanta menjadi mencocokkan pola. Jika digabungkan dengan tipe tersegel dan rekaman, pernyataan pemilihan dapat menentukan alur berdasarkan tipe, membongkar data, dan menjamin kelengkapan.
Pola Tipe dalam Pernyataan Pemilihan
Setiap cabang dapat berupa pola tipe yang mengikat variabel bertipe untuk cabang tersebut.
public class Main {
static String kind(Object o) {
return switch (o) {
case Integer i -> "int " + i;
case String s -> "string " + s;
default -> "other";
};
}
public static void main(String[] args) {
System.out.println(kind(42));
System.out.println(kind("hi"));
System.out.println(kind(3.14));
}
}Tipe Tersegel Tidak Memerlukan default
Jika pemilihnya adalah tipe tersegel dan Anda mencakup setiap subtipe yang diizinkan, pernyataan pemilihan sudah lengkap tanpa default.
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double r) implements Shape {}
record Square(double s) implements Shape {}
static double area(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.r() * c.r();
case Square sq -> sq.s() * sq.s();
};
}
public static void main(String[] args) {
System.out.printf("%.2f%n", area(new Square(3)));
}
}Pola Rekaman dalam Cabang
Cabang dapat membongkar rekaman sehingga komponennya langsung tersedia di dalam isi cabang.
public class Main {
sealed interface Shape permits Circle, Rectangle {}
record Circle(double r) implements Shape {}
record Rectangle(double w, double h) implements Shape {}
static double area(Shape shape) {
return switch (shape) {
case Circle(double r) -> Math.PI * r * r;
case Rectangle(double w, double h) -> w * h;
};
}
public static void main(String[] args) {
System.out.printf("%.2f%n", area(new Rectangle(2, 5)));
}
}Penjaga dengan when
Klausa when menambahkan penjaga boolean ke sebuah cabang. Cabang hanya cocok jika pola sesuai dan penjaganya bernilai true.
public class Main {
static String size(Object o) {
return switch (o) {
case Integer i when i < 0 -> "negative";
case Integer i when i == 0 -> "zero";
case Integer i -> "positive";
default -> "not an int";
};
}
public static void main(String[] args) {
System.out.println(size(-5));
System.out.println(size(0));
System.out.println(size(7));
}
}Urutan Penting bagi Penjaga
Cabang dengan penjaga dicoba dari atas ke bawah. Cabang dengan penjaga yang lebih spesifik harus ditempatkan sebelum cabang yang lebih umum tanpa penjaga; jika tidak, cabang umum akan mengambil alih kecocokan tersebut.
Menangani Nilai Kosong
Tambahkan case null untuk menangani pemilih yang bernilai null; jika tidak, pernyataan pemilihan akan melempar NullPointerException. Anda bahkan dapat menggabungkannya sebagai case null, default.
public class Main {
static String label(String s) {
return switch (s) {
case null -> "missing";
case "yes" -> "affirmative";
default -> "other: " + s;
};
}
public static void main(String[] args) {
System.out.println(label(null));
System.out.println(label("yes"));
System.out.println(label("maybe"));
}
}Pola Bertingkat dalam Pernyataan Pemilihan
Cabang dapat menyusun pola rekaman secara bertingkat untuk mencocokkan struktur yang dalam dan memeriksa nilai bagian dalam dengan penjaga di satu tempat.
public class Main {
record Point(int x, int y) {}
record Line(Point a, Point b) {}
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 a, Point b) -> "line";
default -> "other";
};
}
public static void main(String[] args) {
System.out.println(describe(new Line(new Point(1, 0), new Point(1, 5))));
System.out.println(describe(new Line(new Point(0, 0), new Point(2, 3))));
}
}Pernyataan dan Ekspresi
Pernyataan pemilihan berbasis pola dapat digunakan sebagai ekspresi (menghasilkan nilai dengan -> atau yield) maupun sebagai pernyataan. Aturan kelengkapan berlaku ketika pemilihnya bertipe tersegel.
Menggantikan Kode Pengunjung
Jika digabungkan, tipe tersegel dan pernyataan pemilihan berbasis pola menggantikan pola pengunjung yang panjang serta rangkaian instanceof dengan penentuan alur yang ringkas dan diperiksa kompilator pada model tertutup.
Penafsir Lengkap
Penilai ekspresi yang menggunakan model tersegel dan pernyataan pemilihan berbasis pola.
public class Main {
sealed interface Expr permits Num, Add, Mul {}
record Num(int value) implements Expr {}
record Add(Expr left, Expr right) implements Expr {}
record Mul(Expr left, Expr right) implements Expr {}
static int eval(Expr e) {
return switch (e) {
case Num(int v) -> v;
case Add(Expr l, Expr r) -> eval(l) + eval(r);
case Mul(Expr l, Expr r) -> eval(l) * eval(r);
};
}
public static void main(String[] args) {
Expr e = new Add(new Num(2), new Mul(new Num(3), new Num(4)));
System.out.println(eval(e));
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang pola dalam pernyataan pemilihan.
Rangkuman
Anda telah mempelajari pola dalam pernyataan pemilihan.
- Cabang dapat berupa pola tipe dan pola rekaman, lengkap dengan pembongkaran struktur.
- Pemilih yang tersegel menghasilkan pernyataan pemilihan yang lengkap tanpa
default. - Penjaga
whenmempersempit cabang; urutan sangat penting. case nullmenangani nilai kosong dengan aman.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola dalam switch” gratis?
Ya — teks lengkap “Pola dalam switch” 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 dalam switch”?
Gabungkan tipe sealed dan pola. 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 4 dari 4.
Berapa lama pelajaran “Pola dalam switch” 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