Java Optional Class
1. Pengenalan Optional
java.util.Optional
adalah class java yang dimunculkan semenjak Java 8. Tujuannya untuk mengakomodasi null value atau null reference di Java.
Secara desainnya, java.util.Optional
ini ditujukan untuk membedakan secara jelas
kembalian tipe yang adalah “no result”
2. Apa yang salah sebelum Optional ini ?
null value/reference menjadi persoalan klasik di Java.
Jika sebuah variable berpotensi menjadi null , maka kita harus selalu melakukan pengecekan terhadap dahulu sebelum melakukan operasi selanjutnya.
null diasosiakan dengan tidak adanya value yang cocok. misalnya untuk case nested null :
person.alamat.kabupaten.key
maka akan dilakukan nested checking. Akan jadi ugly karena nested checked, dan juga error prone (mudah lupa ngecek)
jadi menggunakan null sebagai penanda tidak adanya objec, adalah pendekatan yang salah.
Bahasa lain mencoba membuat pengecekan dengan cara yang lebih simple :
-
groovy, dengan ?. dan elvis operator. String version = computer?.getSoundcard()?.getUSB()?.getVersion(); String version = computer?.getSoundcard()?.getUSB()?.getVersion() ?: “UNKNOWN”;
-
Haskell dengan Maybe
-
Scala dengan Option
Java 8 ini terinspirasi oleh Haskell dan Scala. Optional adalah single-value container that either contains a value or doesn’t (it is then said to be “empty”) Tujuannya adalah agar developer mengerti kalau nilainya itu dengan Optinal memaksa berfikir kalau nilainya bisa ada atau tidak. (seperti kontrak).
Jadi bukan tujuannya untuk menggantikan semua yang null reference. Tetapi lebih ke design kontrak API Pakai java 8 :
tring name = computer.flatMap(Computer::getSoundcard) .flatMap(Soundcard::getUSB) .map(USB::getVersion) .orElse(“UNKNOWN”);
Contoh :
1if (product != null) {
2 System.out.println("Nama Produk adalah " + product.getName());
3}
- Optional itu mengingatkan orang untuk mengecek casenya ada yg null;
- Adaptasi dengan functional programming style
https://www.oracle.com/technical-resources/articles/java/java8-optional.html