!! İş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.