Desen Eşleştirme
Coddy'nin Java Journey'sinin Mantık & Akış bölümünün bir parçası — ders 37 / 59.
Java'da örüntü eşleştirme, bir nesnenin belirli bir türe sahip olup olmadığını test etmenize ve ondan bileşenleri çıkarmaya olanak tanır. Tür denetimi ve döküm işlemlerini basitleştirir.
instanceof ile pattern matching'in nasıl kullanıldığını görelim:
Object obj = "Hello";
if (obj instanceof String str) {
// str otomatik olarak String'e dönüştürülür
System.out.println(str.toUpperCase());
}Yukarıdaki kodu çalıştırdıktan sonra çıktı:
"HELLO"
Switch ifadelerinde de örtüntü eşleştirme kullanabilirsiniz:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Yukarıdaki kodu çalıştırdıktan sonra, result içerir:
“Number: 42”
Görev
KolayprocessValue adında bir metot oluşturun ki bu metot bir argüman alsın:
- Farklı tiplerden olabilecek bir Object (
value)
Metot, değeri işlemek ve şu kurallara göre bir dize döndürmek için instanceof ile pattern matching kullanmalıdır:
- Eğer bir Integer ise: "Number: " değerin iki katı ile döndürün
- Eğer bir String ise: "Text: " değerin büyük harfe çevrilmiş hali ile döndürün
- Eğer bir Boolean ise: "Boolean: " ters değer ile döndürün (true false olur ve tersi)
- Herhangi bir diğer tip için: "Unknown" döndürün
Kopya kağıdı
Java'da pattern matching, bir nesnenin belirli bir türe sahip olup olmadığını test etmenize ve ondan bileşenleri çıkarmak için instanceof kullanmanıza olanak tanır:
Object obj = "Hello";
if (obj instanceof String str) {
// str otomatik olarak String'e dönüştürülür
System.out.println(str.toUpperCase());
}Birden fazla pattern matching kontrolünü zincirleyebilirsiniz:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Kendin dene
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Değeri işlemek için instanceof ile pattern matching kullanın
// Eğer bir Integer ise: return "Number: " + (value * 2)
// Eğer bir String ise: return "Text: " + value.toUpperCase()
// Eğer bir Boolean ise: return "Boolean: " + (!value)
// Herhangi bir diğer tür için: return "Unknown"
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1Çok Boyutlu Diziler
2D Diziler Temelleri2D Dizi Elemanlarına Erişim2D Dizilerle İç İçe DöngülerÖzet - 2D DizilerMatris Toplama ve ÇıkarmaJagged Diziler3D Diziler ve ÖtesiYaygın 2D Dizi DesenleriÖzet - Diziler Hakkında Her Şey2HashMap Bölüm 1
HashMap Nedir?HashMap TanımlamaDeğerlere ErişimAnahtarın Varlığını Kontrol EtmeSözlükleri DeğiştirmeÖzet - HashMap3HashMap Bölüm 2
HashMap YöntemlerikeySet() ile YinelemeentrySet() ile Yinelemeİç İçe HashMapÖzet - Depo YönetimiÖzet - HashMap İşlemleri6İleri Akış Kontrolü
Etiketli İfadelerSwitch İfadesiDesen EşleştirmeKoruyucu Yan CümlelerÖzet - Akış Kontrolü9Proje - Benzersiz Kelime Sayacı
Metin Girişi ve DepolamaKelime İşleme