TypeMismatchError Nedir?
Örneğin, bir String değişkenine bir Int değeri atamaya çalıştığınızda derleyici hemen size "hey, bu ne?" diye sorar ve TypeMismatchError'u gösterir. Kotlin, türler arasında geçiş yapmanın güvenli bir şekilde yapılmasını isteyen bir dildir, bu nedenle yanlış türlerin birbirine atanmasını engeller.
TypeMismatchError Hatasını Anlamak
fun main() {
val number: Int = "123" // Hata! String, Int türüyle uyumsuz.
println(number)
}
Yukarıdaki örnekte, bir String değeri olan `"123"`'ü, bir Int değişkenine atamaya çalışıyoruz. Ancak Kotlin, türlerin uyumsuz olduğunu fark eder ve TypeMismatchError hatasını verir.
Hatanın Sebepleri
1. Yanlış Türde Veri Atama: Bir türün başka bir türle karıştırılması en yaygın hatadır. Özellikle bir türü otomatik olarak başka bir türdeki veriye çevirmeye çalışmak bu hatayı doğurur.
2. Nesne Türü Uyumsuzluğu: Nesne tabanlı programlamada, alt sınıf türü ile üst sınıf türünü karıştırmak da TypeMismatchError'a yol açabilir. Örneğin, bir Dog nesnesini Animal türü olarak tanımlamaya çalışmak.
3. Fonksiyon Parametre Uyumsuzluğu: Fonksiyonlara yanlış türde parametreler geçmek de bu hatayı almanıza neden olabilir. Örneğin, bir fonksiyon String parametresi beklerken, siz Int parametresi gönderdiğinizde aynı hatayı alırsınız.
Hata Nasıl Çözülür?
# 1. Tür Dönüşümü Yapın
fun main() {
val number: Int = "123".toInt() // Tür dönüşümü kullanıyoruz.
println(number)
}
Burada, `"123"` değeri önce Int türüne dönüştürülüp sonrasında number değişkenine atanıyor.
# 2. Tür Kontrolü Yapın
fun main() {
val value: Any = "Hello Kotlin"
if (value is String) {
println("String: $value")
} else {
println("Bu bir String değil.")
}
}
Yukarıdaki örnekte, value değişkeninin türü kontrol edilip, yalnızca String türündeki veriye işlem yapılır.
# 3. Parametre Türlerini Doğru Kullanın
fun greet(name: String) {
println("Merhaba, $name!")
}
fun main() {
greet("Ahmet") // Doğru türde parametre
// greet(123) // Bu hata verir: TypeMismatchError
}