0Pricing
Kotlin Academy · Ders

!! İşleci

Null olmayan türü zorlamak ve riskleri

!! İşleci, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Null Olmayanı Zorlama

Bazen null olabilir bir değerin null olmadığından eminsinizdir, ancak derleyici yine de uyarı verir.

Null olmayanı doğrulama işleci !!, derleyiciye size güvenmesini ve değeri null olmayan olarak ele almasını söyler.

Temel Kullanım

!! eklemek, null olabilir bir türü onun null olmayan karşılığına dönüştürür.

Değer gerçekten null değilse kod, normal bir çağrı gibi çalışır.

fun main() {
    val name: String? = "Kotlin"
    println(name!!.length)
}

Tehlike

Değer gerçekten null ise !!, tam o noktada bir NullPointerException fırlatır.

Kotlin'in bir NPE oluşmasına izin verdiği tek yer burasıdır ve bunun sorumluluğu tamamen size aittir.

fun main() {
    val name: String? = null
    try {
        println(name!!.length)
    } catch (e: NullPointerException) {
        println("Boom: NullPointerException")
    }
}

Neden Var

Bu işleç bilerek çirkin tasarlanmıştır. İki ünlem işareti kod incelemesinde hemen göze çarpar ve güvenlik ağını devre dışı bıraktığınız bir noktaya işaret eder.

İşleç, yalnızca gerçekten derleyiciden daha fazlasını bildiğiniz nadir durumlar için vardır.

Güvenli Çağrı Genellikle Daha İyidir

Çoğu durumda Elvis ?: ile birlikte kullanılan güvenli çağrı ?. daha güvenlidir ve aynı ölçüde kısadır.

Aynı amaca yönelik iki yaklaşımı aşağıda karşılaştırın.

fun main() {
    val name: String? = null
    val safeLength = name?.length ?: 0
    println(safeLength)
}

!! Zinciri Oluşturmaktan Kaçının

Birden çok !! işleciyle asla a!!.b!!.c gibi zincirler oluşturmayın. Kod çökerse hangi kısmın null olduğunu anlayamazsınız.

İfadeyi parçalara ayırın veya bunun yerine güvenli çağrılar kullanın.

fun main() {
    val text: String? = "hi"
    // bad style: text!!.uppercase()!! is hard to debug
    val good = text?.uppercase() ?: ""
    println(good)
}

Geçerli Bir Kullanım

Kabul edilebilir bir durum şudur: Daha önce atadığınız ve artık başlatılmış olduğunu bildiğiniz bir değer.

Böyle durumlarda bile mümkünse lateinit kullanmayı veya kodu yeniden yapılandırmayı tercih edin.

fun main() {
    var config: String? = null
    config = "loaded"
    // we just assigned it, so !! is safe here
    println(config!!.uppercase())
}

Yığın İzini Okuma

!! başarısız olduğunda istisna tam satırı gösterir. Yanlış bir sonucun sessizce ortaya çıkmasına kıyasla bu kesinlik, tek olumlu yanıdır.

Yanlış olan varsayımı bulup düzeltmek için iletiyi kullanın.

fun length(text: String?): Int {
    return text!!.length
}

fun main() {
    println(length("abc"))
    // length(null) would throw on the !! line
}

!! İşlecini Kaldıracak Yeniden Yapılandırma

Çoğu !! işleci, null durumunu düzgün biçimde ele alarak kaldırılabilir. Aşağıda bir Elvis yedeği, işlevi tüm girdiler için tanımlı ve çökmeye karşı güvenli hâle getirir.

fun length(text: String?): Int {
    return text?.length ?: 0
}

fun main() {
    println(length("abc"))
    println(length(null))
}

Pratik Kural

Her !! işlecini şu soruya dönüştürün: Bunun hiçbir zaman null olmayacağından kesinlikle emin miyim?

  • Evet ve nadirse → kabul edilebilir
  • Emin değilseniz → ?. ve ?: kullanın

Bir Araya Getirme

!! işleci keskin bir araçtır:

  • Null olabilir bir değeri null olmayan türe zorlar
  • Değer null ise bir NullPointerException fırlatır
  • Neredeyse tüm durumlarda güvenli çağrıları ve Elvis işleçlerini tercih edin
fun main() {
    val sure: String? = "definitely here"
    println(sure!!.length)
    val maybe: String? = null
    println(maybe?.length ?: -1)
}

Hızlı Kontrol

Null olmayanı doğrulama işleci konusundaki anlayışınızı sınayın.

Özet

!! işleci hakkında şunları öğrendiniz:

  • Null olabilir bir değerin null olmadığını doğrular
  • Yanlış olduğunda bir NullPointerException fırlatır
  • Bir alışkanlık olarak değil, son çare olarak kullanılmalıdır

Sırada null olabilirliğin Java'dan platform türleri aracılığıyla nasıl geldiğini göreceksiniz.

Sıkça Sorulan Sorular

“!! İşleci” dersi ücretsiz mi?

Evet — “!! İşleci” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“!! İşleci” dersinde ne öğreneceğim?

Null olmayan türü zorlamak ve riskleri Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“!! İşleci” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Nullable ve Non-Null Türler
  2. Güvenli Çağrılar ve Elvis
  3. !! İşleci
  4. Platform Türleri
← Kotlin Academy Sayfasına Dön