NullPointerExceptions Önleme
Güvenli kod kalıpları.
NullPointerExceptions Önleme, CoddyKit'te ücretsiz bir Android 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, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
Hedef: NPE Olmaması
NullPointerException veya NPE, kod gerçekten null olan bir şeyi kullandığında oluşur. Kotlin, bu durumları nadir hâle getirecek şekilde tasarlanmıştır.
Bu derste öğrendiğiniz araçlar bir araya getirilir ve bir NPE'nin yine de ortaya çıkabileceği birkaç durum açıklanır.
!! İşleci
Null olmayan değer doğrulaması !!, derleyiciye bir değerin null olmadığı konusunda size güvenmesini söyler. Yanılıyorsanız bir NPE fırlatır.
Güvenliği ortadan kaldırdığı için bu işleci nadiren ve yalnızca emin olduğunuzda kullanın.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! Çökmeye Yol Açabilir
Değer gerçekten null ise !!, tam olarak o satırda bir NullPointerException fırlatır.
Bu, Kotlin'in önlediği sorunu yeniden ortaya çıkarmanın başlıca yoludur. Güvenli çağrı veya Elvis işlecinin yeterli olduğu durumlarda !! kullanmaktan kaçının.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionGüvenli Alternatifleri Tercih Edin
!! kullanımının neredeyse her biçimi ?. ve ?: ile yeniden yazılabilir. Güvenli sürüm çökmeye yol açamaz.
Aşağıdaki riskli ve güvenli biçimleri karşılaştırın.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Erken Doğrulayın
Kodunuzun sınırında null durumunu ele alın, ardından içeride null olmayan değerlerle çalışın. Eksik girdiyi en başta reddetmek için return veya throw ile Elvis işlecini kullanın.
Denetimden sonra değer, akıllı dönüştürmeyle null olmayan türe dönüştürülür.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Null gerçekten bir hataya işaret ettiğinde requireNotNull, anlaşılır bir hata fırlatır ve null olmayan değeri döndürür.
Bir ileti ekleyebildiğiniz için !! işlecine göre daha açıklayıcıdır.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Java'dan Gelen Platform Türleri
Java'dan gelen değerlerin null olabilirliği bilinmez; bunlara platform türleri denir. Kotlin, bu değerlerin null olmadığını garanti edemez.
Java kitaplıklarını kullanırken beklenen türü açıkça belirtin ve null durumunu ihtiyatlı biçimde ele alın.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)lateinit Tuzağı
Bir lateinit var, null olmayan bir özelliğin başlatılmasını ertelemenizi sağlar. Ancak atanmadan önce kullanılması bir istisna fırlatır.
lateinit işlevini yalnızca değerin herhangi bir erişimden önce atanacağından emin olduğunuzda kullanın.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Null Yerine Varsayılan Değerler
Çoğu zaman makul bir varsayılan değer seçerek null olabilirliği tamamen önleyebilirsiniz. Boş bir dize veya boş bir liste, çoğunlukla null değerinden daha iyi bir seçenektir.
Null olabilir türlerin sayısı azaldıkça NPE olasılığı da azalır.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}Güvenli Bir Akış
Bu program isteğe bağlı bir değeri okur, güvenli biçimde dönüştürür ve her zaman bir sonuç üretir. !! yoktur, çökme yoktur.
Gerçek Android kodunda hedeflemeniz gereken stil budur.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}En İyi Uygulamalar
Null olmayan türleri tercih edin, sınır noktalarında null durumunu Elvis ile ele alın ve isteğe bağlı işlemler için ?.let kullanın. !! işlecini yalnızca null olmanın imkânsız olduğu nadir durumlara saklayın.
Bu alışkanlıkları izlerseniz NullPointerExceptions geçmişte kalır.
val safe = data?.value ?: default
data?.let { handle(it) }Hızlı Denetim
NullPointerExceptions durumlarından kaçınma konusundaki anlayışınızı sınayın.
Özet
Kotlin'de NPE'ler genellikle !!, Java'dan gelen platform türleri veya başlatılmamış lateinit değerleri nedeniyle oluşur. Null olmayan türleri ve güvenli işleçleri tercih ederek bunlardan kaçının.
Kodun çökmemesini sağlamak için ?., ?:, ?.let ve requireNotNull gibi doğrulamaları kullanın. Artık Kotlin null güvenliğinin temel unsurlarını tamamladınız.
Sıkça Sorulan Sorular
“NullPointerExceptions Önleme” dersi ücretsiz mi?
Evet — “NullPointerExceptions Önleme” 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 Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“NullPointerExceptions Önleme” dersinde ne öğreneceğim?
Güvenli kod kalıpları. Android 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.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android 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.
“NullPointerExceptions Önleme” 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 Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android 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 ve Nullable Olmayan Türler
- Güvenli Çağrılar ve Elvis
- let, also ve Kapsam İşlevleri
- NullPointerExceptions Önleme