Java Optional Nedir?
Optional, Java 8 ile birlikte eklenen ve null
değerlerine karşı bir çözüm üreten bir sınıftır. Bu yapı sayesinde null
değerlerine ait özel durumların yönetimi gerekmez ve kodlarımız daha okunaklı hale gelir. Ayrıca Optional
sayesinde bir nesnenin var olup olmadığını kontrol ederek ona göre işlemler yapmayı sağlayarak, null
pointer hatasına neden olman durumları önleme amacıyla geliştirilmiştir.
Null değerlerinin kodlarımızda yaygın bir kullanımı vardır ve bu değerlerin olmayabileceği durumlar programlama sırasında unutulabilir. Bu durumda kodlarımızda null
değerlerine ait özel durumların yönetilmemesi sonucu çalışma zamanında NullPointerException hatası alınabilir.
Java Optional Nasıl Kullanılır?
Optional
objesi üzerinde isPresent()
metodunu kullanarak bir nesnenin olup olmadığını kontrol edebiliriz. Bu metodun döndürdüğü boolean değer true ise nesne mevcuttur ve false ise nesne mevcut değildir.
Optional
, bir nesnenin mevcut olduğu durumlarda nesnenin değerine ulaşmak için get()
metodunu kullanabiliriz. Ancak bu metodun kullanımı null değerlerine ait özel durumların yönetilmemesi sonucu NullPointerException
hatası alınabileceği için tavsiye edilmemektedir. Bunun yerine isPresent()
metodunu kullanarak bir nesnenin mevcut olup olmadığını kontrol ederek ona göre işlem yapmak daha doğru bir yaklaşım olacaktır.
Ayrıca Optional, bir nesnenin mevcut olmadığı durumlarda default değerler belirleyebilir veya farklı bir işlem yapılmasını sağlayabiliriz. Bunun için orElse()
ve orElseGet()
metodları kullanılabilir. orElse()
metodu, bir nesnenin mevcut olmadığı durumda belirlenen default değerini döndürürken, orElseGet() metodu ise bir nesnenin mevcut olmadığı durumda belirlenen default değer üreten bir Supplier fonksiyonunu çalıştırarak default değer döndürür.
Örneğin, aşağıdaki örnekte bir String nesnesinin olup olmadığını kontrol ediyoruz ve mevcut değilse “default” değerini döndürüyoruz:
Optional<String> optional = Optional.empty(); String result = optional.orElse("default");
Bu örnekteki gibi Optional
, bir nesnenin olup olmadığını kontrol etmek için kullanılabilir. Ancak aynı zamanda bir nesnenin mevcut olduğu durumlarda da işlemler yapmamıza olanak sağlar. Örneğin, aşağıdaki örnekte bir Integer
nesnesinin olup olmadığını kontrol ediyoruz ve mevcutsa 2 katını döndürüyoruz:
Optional<Integer> optional = Optional.of(5); int result = optional.map(i -> i * 2).orElse(0);
Bu örnekte optional.map()
metodu sayesinde mevcut olan Integer nesnesinin değerine ulaşıp 2 katını alıyoruz. Eğer optional
nesnesi mevcut değilse orElse()
metodu sayesinde 0 değerini döndürüyoruz.
Bu örneklerde görüldüğü gibi Optional
, null
değerlerine karşı bir çözümdür ve bu yapı sayesinde null değerlerine ait özel durumların yönetimi gerekmez. Bu sayede kodlarımız daha okunaklı hale gelir ve çalışma zamanında NullPointerException
hatalarının önüne geçmiş oluruz.