ProgramlamaKotlin geliştiricisi

Kotlin'de Nullable-tiple çalışma özelliklerini açıklayın. Hangi dil araçları null değerlerle güvenli bir şekilde çalışmayı sağlar? Kod örneği verin ve en iyi uygulamaları açıklayın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Safe-call operatörü: ?., eğer nesne null ise null döner ve aksi takdirde metoda/alanı çağırır: name?.length.
  • Elvis operatörü: ?:, eğer solda null ise varsayılan bir değer atamak için kullanılır: val length = name?.length ?: 0
  • if/when ile kontrol: Örnek:
if (name != null) { println(name.length) }
  • Assert operatörü ( !! ): 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.

Kandırmaca soru.

val a: String tipine 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.

Konunun ince noktalarını bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Bankacılık uygulamasında User tipinde bir değişken, müşteri arama sonucunu saklıyordu. Geliştirici var user: User tanımladı, ancak bazen müşteri bulunamadı ve servis null dö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 null olarak 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.