Statik olarak yazımlanmış olan Kotlin, tür kontrolünün çoğunu derleme sırasında gerçekleştirir. Bununla birlikte, dinamik davranış veya sağlam hata işleme için çalışma zamanı tür kontrolünün gerekli olduğu durumlar ortaya çıkar. Bu makale, Kotlin değişkeninin türünü çalışma zamanında belirlemek için iki etkili yöntemi ele almaktadır.
İçerik Tablosu
is
Anahtar Kelimesinin Kullanımı
is
anahtar kelime, çalışma zamanı tür kontrolü için en basit ve en etkili yaklaşımı sunar. Değişken belirtilen türde veya alt türünde ise true
, değilse false
döndürür. Bu, değişkenin türüne bağlı koşullu mantığı kolaylaştırır.
fun checkTypeWithIs(variable: Any) {
when (variable) {
is String -> println("Değişken bir String: $variable")
is Int -> println("Değişken bir Int: $variable")
is Double -> println("Değişken bir Double: $variable")
else -> println("Değişken bilinmeyen bir türde: ${variable?.javaClass?.name ?: "null"}")
}
}
fun main() {
val myString = "Merhaba, Kotlin!"
val myInt = 10
val myDouble = 3.14
val myNull: String? = null
checkTypeWithIs(myString) // Çıktı: Değişken bir String: Merhaba, Kotlin!
checkTypeWithIs(myInt) // Çıktı: Değişken bir Int: 10
checkTypeWithIs(myDouble) // Çıktı: Değişken bir Double: 3.14
checkTypeWithIs(myNull) // Çıktı: Değişken bilinmeyen bir türde: null
}
Bu geliştirilmiş örnek, daha temiz kod için bir when
ifadesi kullanır ve null
değerlerini zarif bir şekilde işler. Çok önemli olarak, Kotlin’in akıllı dönüşümleri, when
dalları içinde açık dönüştürme ihtiyacını ortadan kaldırır. Başarılı bir is
kontrolünden sonra, değişken otomatik olarak kontrol edilen tür olarak işlenir.
qualifiedName
Özelliğinin Kullanımı
Bu yöntem, türün adına String olarak ihtiyacınız olduğunda ideal olan daha programatik bir yaklaşım sunar. ::class
özelliğini ve ortaya çıkan KClass
örneğinin qualifiedName
özelliğini kullanır.
fun checkTypeWithQualifiedName(variable: Any) {
val typeName = variable::class.qualifiedName ?: "Bilinmeyen Tür"
println("Değişkenin türü: $typeName")
}
fun main() {
val myString = "Merhaba, Kotlin!"
val myInt = 10
val myList = listOf(1, 2, 3)
val myNull: String? = null
checkTypeWithQualifiedName(myString) // Çıktı: Değişkenin türü: kotlin.String
checkTypeWithQualifiedName(myInt) // Çıktı: Değişkenin türü: kotlin.Int
checkTypeWithQualifiedName(myList) // Çıktı: Değişkenin türü: kotlin.collections.List
checkTypeWithQualifiedName(myNull) // Çıktı: Değişkenin türü: kotlin.String
}
Bu revize edilmiş örnek, olası null değerleri daha sağlam bir şekilde işlemek için elvis operatörünü (?:) kullanarak null güvenliğini içerir. Kayıt tutma, hata ayıklama veya dize gösterimine dayalı dinamik tür işleme için yararlı olan tam nitelenmiş ad döndürülür. Bununla birlikte, basit tür kontrolleri için is
anahtar kelime daha verimlidir.
Özetle, her iki yöntem de çalışma zamanında bir değişkenin türünü belirlemenin değerli yollarını sağlar. is
anahtar kelime koşullu mantıkta mükemmeldir, qualifiedName
ise tür adlarını dize olarak gerektiren programatik senaryolarda öne çıkar. Doğru yöntemi seçmek, uygulamanızın belirli ihtiyaçlarına bağlıdır.