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şleme, bir nesnenin belirli bir türe sahip olup olmadığını test etmenize ve bileşenlerini ondan çıkarmanıza olanak tanır. Tür denetimi ve tür dönüştürme işlemlerini basitleştirir.
instanceof ile desen eşleştirmenin nasıl kullanılacağına bakalım:
Object obj = "Hello";
if (obj instanceof String str) {
// str otomatik olarak String'e cast edilir
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
KolayTek bir bağımsız değişken alan processValue adlı bir yöntem oluşturun:
- Farklı türlerde olabilen bir Object (
value)
Yöntem, değeri işlemek ve şu kurallara göre bir dize döndürmek için instanceof ile kalıp eşleştirmeyi kullanmalıdır:
- Bir Integer ise: değer iki katına çıkarılmış şekilde başına "Number: " ekleyerek döndürün
- Bir String ise: değeri büyük harfe dönüştürülmüş şekilde başına "Text: " ekleyerek döndürün
- Bir Boolean ise: karşıt değeri (true false olur ve bunun tersi) başına "Boolean: " ekleyerek döndürün
- 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 İşlemeKendi başına pratik yap: Online Java derleyicisi