!! İşleci: Ne Zaman ve Neden Kaçınılmalı
Null olmayan değer onama işlecini, risklerini ve daha iyi seçenekleri anlayın.
!! İşleci: Ne Zaman ve Neden Kaçınılmalı, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. 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.
!! Nedir?
Null olmayanı zorlama işleci !!, null olabilir bir türü null olmayan türe dönüştürür. Değer çalışma zamanında null ise NullPointerException fırlatır.
Temel !! Kullanımı
x!!, x null değilse onu döndürür; aksi takdirde NPE fırlatır.
fun main() {
val name: String? = "Kotlin"
val len: Int = name!!.length // 6
println(len)
}!! Null Değerinde Hata Fırlatır
Değer gerçekten null ise Kotlin'in önlemeye çalıştığı hatanın aynısını alırsınız.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("NPE caught!")
}
}Daha İyi Seçenek: Güvenli Çağrı
!! yerine ?. kullanmayı tercih edin; çökmeler olmadan kontrollü işlem yapılır.
fun main() {
val name: String? = null
val len = name?.length
println(len) // null — no crash
}Daha İyi Seçenek: Elvis İşleci
Makul bir varsayılan değer sağlamak için ?. ile ?: işlecini eşleştirin.
fun main() {
val name: String? = null
val len = name?.length ?: 0
println(len) // 0
}Daha İyi Seçenek: Akıllı Tür Dönüşümü
if (x != null) denetimi akıllı tür dönüşümünü etkinleştirir; !! gerekmez.
fun main() {
val name: String? = "Alice"
if (name != null) {
println(name.length) // smart-cast to String
}
}Daha İyi Seçenek: requireNotNull
Değerin mevcut olması gerekiyorsa, requireNotNull(x) { "..." } anlamlı bir IllegalArgumentException fırlatır.
fun process(name: String?) {
val safe = requireNotNull(name) { "name is required" }
println("processing $safe")
}
fun main() {
process("Ada")
// process(null) // throws IllegalArgumentException: name is required
}Daha İyi Seçenek: checkNotNull
checkNotNull(x) aynı şekilde çalışır ancak IllegalStateException fırlatır; değişmez koşullar için kullanın.
class Service {
private var data: String? = null
fun load() { data = "loaded" }
fun read(): String = checkNotNull(data) { "load() must be called first" }
}
fun main() {
val s = Service()
s.load()
println(s.read())
}!! İşlecinin Geçerli Kullanımları
Nadir ancak geçerli bir durum: null değerinin bulunmamasının derleme zamanında kanıtlanamayan gerçek bir değişmez koşul olduğu durumlar (örneğin yansıtmalı bir çağrıdan sonra). Nedenini yorum olarak belirtin.
fun main() {
val list = listOf(1, 2, 3)
val firstEven: Int = list.find { it % 2 == 0 }!! // safe: we know list has an even
println(firstEven)
}Zincirlenmiş !! — En Kötü Karşıt Kalıp
Bir zincirde birden çok !! kullanılması kod kokusudur. Güvenli çağrılar ve koruma koşullarıyla yeniden düzenleyin.
class A(val b: B?)
class B(val c: C?)
class C(val name: String?)
fun main() {
val a: A? = A(B(C("ok")))
// BAD: val n = a!!.b!!.c!!.name!!
val n = a?.b?.c?.name ?: "unknown"
println(n)
}!! Kullanımını Kaldırma
!! yerine daha dürüst bir API kullanın: null olabilir dönüşler, girişte requireNotNull veya erken dönüş.
fun firstUpper(s: String?): String? = s?.firstOrNull()?.uppercase()
fun main() {
println(firstUpper("alice")) // A
println(firstUpper("")) // null
println(firstUpper(null)) // null
}Kısa Denetim
Çalışma zamanında gerçekten null olan bir değere !! uygularsanız ne olur?
Özet
!!, Kotlin'in null güvenliğini etkisizleştiren kaçış yoludur. ?., ?:, akıllı tür dönüşümleri, requireNotNull veya checkNotNull kullanmayı tercih edin. !! işlecini yalnızca derleyicinin kanıtlayamadığı, belgelenmiş değişmez koşullar için saklayın.
Sıkça Sorulan Sorular
“!! İşleci: Ne Zaman ve Neden Kaçınılmalı” dersi ücretsiz mi?
Evet — “!! İşleci: Ne Zaman ve Neden Kaçınılmalı” 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: Ne Zaman ve Neden Kaçınılmalı” dersinde ne öğreneceğim?
Null olmayan değer onama işlecini, risklerini ve daha iyi seçenekleri anlayın. 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 4. dersidir.
“!! İşleci: Ne Zaman ve Neden Kaçınılmalı” 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
- Nullable Türler ve ? Değiştiricisi
- Güvenli Çağrı ?. ve Gerçek Kodda Elvis ?:
- Nullable Alıcılarla let, also ve run
- !! İşleci: Ne Zaman ve Neden Kaçınılmalı