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 desen eşleştirme (pattern matching), bir nesnenin belirli bir türe sahip olup olmadığını test etmenize ve ondan bileşenleri çıkarmanıza olanak tanır. Tip kontrolü ve tür dönüştürme (casting) işlemlerini basitleştirir.
instanceof ile desen eşleştirmenin (pattern matching) nasıl kullanılacağı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 kod yürütüldükten sonra çıktı şöyledir:
"HELLO"
Desen eşleştirme kontrollerini else if ile de 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";
}Yukarıdaki kodu çalıştırdıktan sonra, result şunu içerir:
“Number: 42”
Görev
KolayBir argüman alan processValue adında bir metot oluşturun:
- Farklı türlerde olabilen bir Nesne (
value)
Metot, değeri işlemek için instanceof ile desen eşleştirme (pattern matching) kullanmalı ve şu kurallara göre bir dize (string) döndürmelidir:
- Eğer bir Integer ise: "Number: " ve ardından değerin iki katını döndürün
- Eğer bir String ise: "Text: " ve ardından değerin büyük harf halini döndürün
- Eğer bir Boolean ise: "Boolean: " ve ardından zıt değeri döndürün (true ise false, false ise true)
- Diğer tüm türler için: "Unknown" döndürün
Kendin dene
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Değeri işlemek için instanceof ile desen eşleştirme (pattern matching) kullanın
// Eğer bir Integer ise: "Number: " + (value * 2) döndürün
// Eğer bir String ise: "Text: " + value.toUpperCase() döndürün
// Eğer bir Boolean ise: "Boolean: " + (!value) döndürün
// Diğer tüm türler için: "Unknown" döndürün
}
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