Jangan gunakan null, gunakan Opsional
Seperti yang telah Anda tunjukkan, salah satu masalah terbesar null
di Jawa adalah dapat digunakan di mana saja , atau setidaknya untuk semua jenis referensi.
Tidak mungkin mengatakan itu bisa null
dan apa yang tidak bisa.
Java 8 memperkenalkan pola yang lebih baik banyak: Optional
.
Dan contoh dari Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Jika masing-masing dari ini dapat atau tidak dapat mengembalikan nilai yang berhasil, Anda dapat mengubah API ke Optional
s:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Dengan secara eksplisit menyandikan opsionalitas dalam tipe, antarmuka Anda akan jauh lebih baik, dan kode Anda akan lebih bersih.
Jika Anda tidak menggunakan Java 8, Anda dapat melihatnya com.google.common.base.Optional
di Google Guava.
Penjelasan yang baik oleh tim Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Penjelasan yang lebih umum tentang kerugian hingga nol, dengan contoh-contoh dari beberapa bahasa: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nullull, @Nullable
Java 8 menambahkan anotasi ini untuk membantu alat pengecekan kode seperti IDE menangkap masalah. Mereka cukup terbatas dalam efektivitasnya.
Periksa kapan masuk akal
Jangan menulis 50% dari kode Anda memeriksa nol, terutama jika tidak ada yang masuk akal kode Anda dapat dilakukan dengan null
nilai.
Di sisi lain, jika null
bisa digunakan dan berarti sesuatu, pastikan untuk menggunakannya.
Pada akhirnya, Anda jelas tidak dapat menghapus null
dari Jawa. Saya sangat menyarankan untuk mengganti Optional
abstraksi jika memungkinkan, dan memeriksa null
waktu lain yang Anda bisa lakukan sesuatu yang masuk akal tentangnya.