Kotlin, null ile güvenli çalışmayı tip sistemi sayesinde gerçekleştirir: herhangi bir tip varsayılan olarak null olamaz, örneğin val a: String = null derleme hatası verir. null atanabilirliği göstermek için ? sembolü kullanılır, örneğin:
val name: String? = null
Nullable-tiple çalışmak için aşağıdaki araçlar sağlanır:
?., eğer nesne null ise null döner ve aksi takdirde metoda/alanı çağırır: name?.length.?:, eğer solda null ise varsayılan bir değer atamak için kullanılır: val length = name?.length ?: 0if (name != null) { println(name.length) }
null ise NullPointerException fırlatarak değeri zorla almak için kullanılır (çok dikkatli kullanılmalıdır):val length = name!!.length
En iyi uygulamalar: Nullable tipleri minimize edin, Safe-call ve Elvis operatörlerini kullanın, !!'den kaçının, null durumlarını açıkça modelleyin.
val a: Stringtipine null atamak mümkün mü ve bunu nasıl önleriz?
Cevap: Hayır, Kotlin'de tipler varsayılan olarak null olamaz. Null atamasına izin vermek için açıkça val a: String? = null demek gerekir. ? olmadan tipler her zaman non-null'dır.
Hikaye
Bankacılık uygulamasında
Usertipinde bir değişken, müşteri arama sonucunu saklıyordu. Geliştiricivar user: Usertanımladı, ancak bazen müşteri bulunamadı ve servisnulldöndü. Bu NPE'ye neden oldu ve kitlenmelere yol açtı.
Hikaye
Destek için kullanılan bir sohbet botunda, kullanıcı mesajlarına erişmek için !! kullanıldı (
message!!.text), her zaman mesajların geldiği düşünüldü. Bot, ilk boş mesajda çöküyordu. Safe-call burada sorunu çözerdi.
Hikaye
Mobil uygulamada veriler veritabanından yüklenmemiş olabilir ve
nullolarak geliyordu. Güvenli bir erişim yerine geliştirici doğrudan erişimi kullandı ve bu durumda tüm eksik verilere yönelik çöküşlere neden oldu.