Boş kullanmayın, isteğe bağlı kullanın
Belirttiğiniz gibi null
, Java'daki en büyük sorunlardan biri, her yerde veya en azından tüm referans türleri için kullanılabilmesidir.
Bunun olabileceğini null
ve olamayacağını söylemek imkansız .
Java 8 tanıtır çok daha iyi bir model: Optional
.
Ve Oracle'dan örnek:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Bunların her biri başarılı bir değer verebilir veya getiremezse, API’leri Optional
s olarak değiştirebilirsiniz :
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Türdeki seçeneği açıkça kodlayarak, arabirimleriniz çok daha iyi olacak ve kodunuz daha temiz olacaktır.
Java 8 kullanmıyorsanız com.google.common.base.Optional
, Google Guava’ya bakabilirsiniz .
Guava ekibi tarafından iyi bir açıklama: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Bazı dillerden örneklerle null dezavantajlarının daha genel bir açıklaması: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nonnull, @Nullable
Java 8, IDE'ler gibi kod kontrol araçlarının sorunlara yakalanmasına yardımcı olmak için bu ek açıklamaları ekler. Etkinlikleri konusunda oldukça sınırlıdırlar.
Ne zaman anlamlı olduğunu kontrol et
Kodunuzun% 50'sini boş (null) kontrol etmeyin, özellikle kodunuzun bir null
değerle yapabileceği makul bir şey yoksa .
Öte yandan, eğer null
kullanılabiliyorsa ve bir şey ifade ediyorsa , onu kullandığınızdan emin olun.
Sonuçta, belli ki null
Java'dan kaldıramazsınız . Optional
Mümkün olduğunca soyutlamayı değiştirmenizi ve null
bu konuda makul bir şeyler yapabileceğiniz diğer zamanları kontrol etmenizi şiddetle tavsiye ederim .