Pattern matching
- Java kursu
- Orta seviye
- Ders 63/116
- 4 dk
instanceof pattern matching ile tip dönüşümünü öğrenirsin.
instanceof ile tür denetimi
Bazen polimorfik bir referansın gerçek türünü bilmek gerekür. instanceof operatörü bunu sağlar: if (s instanceof Circle) doğruysa s'nin Circle olduğu anlaşılır. Eski Java'da türü dönüştürüp ayrı bir değişkene atamak gerekirdi.
Java 16'dan beri pattern matching for instanceof vardır: if (s instanceof Circle c) yazarsan c otomatik olarak Circle türüne cast edilir. Bu daha kısa ve güvenlidir.
Switch pattern (Java 21)
Java 21 ile switch ifadeleri de tür denetimi yapabilir. switch (s) { case Circle c -> ...; case Square q -> ...; } yazarak her tür için farklı kod çalıştırırsın. Bu, klasik if-instanceof zincirine göre daha okunaklıdır.
Switch expression bir değer döndürebilir; case null ile null denetimi eklenebilir. Tüm alt türler kapsanmazsa default şarttır.
Uygulama Pattern matching ile alan yazdır
Üstteki abstract class Shape ve Circle extends Shape tanımlarını kullan. Bir de class Square extends Shape ekle; int side, yapıcı ve area metodu return side * side;. main içinde Shape s = new Circle(3); ata, sonra if (s instanceof Circle c) pattern matching ile System.out.println("Çember: " + c.r); yazdır.
Başlangıç kodu
// abstract Shape ve Circle yukarıdaki gibi
// Square sınıfını ekle: side alanı ve area metodu
// main: bir Circle örneğini Shape olarak ata ve pattern matching ile yazdırÖrnek çözüm
abstract class Shape {
abstract int area();
}
class Circle extends Shape {
int r;
Circle(int r) { this.r = r; }
int area() { return r * r * 3; }
}
class Square extends Shape {
int side;
Square(int side) { this.side = side; }
int area() { return side * side; }
}
public class Main {
public static void main(String[] args) {
Shape s = new Circle(3);
if (s instanceof Circle c) {
System.out.println("Çember: " + c.r);
}
}
}Beklenen çıktı
Çember: 3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Pattern matching'i tamamla
if (s instanceof ____ c) {
System.out.println(c.r);
}
if (s instanceof Circle c) {
System.out.println(c.r);
}
Açıklama: Pattern matching c değişkenini Circle türüne bağlar.
2 instanceof Circle c ne yapar?
- c'yi Circle türüne cast eder ve kapsamda tanımlar Doğru cevap
- c'yi static değişken yapar
- Circle sınıfını siler
- Shape'i Circle'a dönüştürür
Açıklama: Pattern matching, tür denetimi geçerse c'yi Circle olarak bağlar.
3 instanceof kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
instanceof |
Tür denetimi operatörü |
pattern matching |
Cast'i otomatik bağlar |
switch (Java 21) |
Tür bazlı dallanma |
default |
Tüm türler kapsanmazsa şart |