switch İçinde Örüntüler
Mühürlü türleri ve örüntüleri birleştirin
switch İçinde Örüntüler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Seçim Deyimindeki Kalıplar
Seçim deyimi, sabitleri eşlemekten kalıpları eşlemeye doğru gelişmiştir. Mühürlü türler ve kayıtlarla birlikte kullanıldığında seçim deyimi türe göre yönlendirme yapabilir, verileri bileşenlerine ayırabilir ve tüm durumların kapsandığını garanti edebilir.
Seçim Deyimindeki Tür Kalıpları
Her dal bir tür kalıbı olabilir ve o dala özgü türü belirtilmiş bir değişken bağlayabilir.
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));
}
}Mühürlü Türlerde Varsayılan Dal Gerekmez
Seçici mühürlü bir tür olduğunda ve izin verilen tüm alt türleri kapsadığınızda, seçim deyimi bir default dalı olmadan tüm durumları kapsar.
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)));
}
}Dallarda Kayıt Kalıpları
Dallar kayıtları bileşenlerine ayırabilir ve bileşenleri doğrudan dal gövdesinin kullanımına sunabilir.
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)));
}
}when ile Koruma Koşulları
Bir when koşulu, bir dala mantıksal bir koruma koşulu ekler. Dal yalnızca kalıp uyduğunda ve koruma koşulu doğru olduğunda eşleşir.
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));
}
}Koruma Koşullarında Sıra Önemlidir
Koruma koşullu dallar yukarıdan aşağıya denenir. Daha özel koruma koşullu dal, daha genel koruma koşulsuz daldan önce gelmelidir; aksi takdirde genel dal onu yutar.
Boş Değeri Ele Alma
Boş bir seçiciyi ele almak için case null ekleyin; aksi takdirde seçim deyimi NullPointerException fırlatır. Hatta bunu case null, default biçiminde birleştirebilirsiniz.
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"));
}
}Seçim Deyiminde İç İçe Kalıplar
Dallar, derin yapıları eşlemek ve iç değerler üzerinde tek bir yerde koruma koşulu uygulamak için iç içe kayıt kalıpları kullanabilir.
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))));
}
}Deyimler ve İfadeler
Kalıplı seçim hem bir ifade olarak (-> veya yield ile değer üretir) hem de bir deyim olarak çalışır. Seçici mühürlü olduğunda tüm durumların kapsanması kuralları uygulanır.
Ziyaretçi Kodunu Değiştirme
Mühürlü türler ile kalıplı seçim birlikte kullanıldığında, ayrıntılı ziyaretçi kalıplarını ve instanceof merdivenlerini kapalı bir model üzerinde derleyici tarafından denetlenen kısa yönlendirmelerle değiştirir.
Eksiksiz Bir Yorumlayıcı
Mühürlü bir model ve kalıplı seçim kullanan bir ifade değerlendiricisi.
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));
}
}Kısa Sınama
Seçim deyimindeki kalıpları anlayıp anlamadığınızı sınayın.
Özet
Seçim deyimindeki kalıpları öğrendiniz.
- Dallar, bileşenlerine ayırma özelliğiyle tür kalıpları ve kayıt kalıpları olabilir.
- Mühürlü seçiciler,
defaultolmadan tüm durumları kapsayan seçim deyimleri sağlar. whenkoruma koşulları dalları daha da belirginleştirir; sıra önemlidir.case nullboş değerleri güvenli biçimde ele alır.
Sıkça Sorulan Sorular
“switch İçinde Örüntüler” dersi ücretsiz mi?
Evet — “switch İçinde Örüntüler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“switch İçinde Örüntüler” dersinde ne öğreneceğim?
Mühürlü türleri ve örüntüleri birleştirin Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“switch İçinde Örüntüler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- instanceof için Örüntü Eşleme
- Record Örüntüleri
- İç İçe Record Örüntüleri
- switch İçinde Örüntüler