java optional
Published: 2024-05-17 13:44:20

**Java 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³².

Java'da `Optional` sınıfını kullanarak **NullPointerException** hatalarını önleyebilir ve daha güvenli kod yazma pratiğini benimseyebilirsiniz. İşte `Optional`'ın temel kullanımı ve bazı örnekler:

1. **Neden Optional Kullanmalıyız?**
    - Java, çoğu Nesne Yönelimli (OOP) dilde olduğu gibi, tip kullanımında oldukça dikkat ve kontrol gerektirir.
    - Örneğin, bir metotun bir nesne döndürdüğünü varsayalım:
      ```java
      public User getUser();
      ```

      Bu metot, `User` tipinde bir nesne döndürdüğü açıktır, ancak başka bir değer de döndürebilir: **null**.

    -Herhangi bir primitive olmayan tip **null** olarak ayarlanabildiğinden, bir geliştiricinin aşağıdaki yöntem implementasyonunu yazmasını engelleyen hiçbir şey yoktur:
      ```java
      public User getUser() {
          return null;
      }
      ```
     Bu durum, bu yöntemi çağıran istemci için zahmetli bir durum yaratır. `getUser` yönteminden döndürülen `User` nesnesini kullanmadan önce, bir istemci nesnenin **null** olup olmadığını kontrol etmelidir:

      ```java
      User user = getUser();
      if (user == null) {
          // null durumuyla ilgilen...
      } else {
          // user nesnesiyle bir şeyler yap...
      }
      ```

    Bu yaklaşım, `User` nesnesinin kullanımının **NullPointerException (NPE)** ile sonuçlanmamasını sağlar. Ancak bu da başka bir sorun yaratır: Primitive olmayan herhangi bir nesne örtük olarak **null** ayarlanabilir. Bu nedenle, bir yöntemden döndürülen her nesneyi kullanmadan önce geçersizlik açısından kapsamlı bir şekilde kontrol etmek zorundayız. Bu, büyük bir uygulamada mümkün olmayacağı gibi, kodumuzun temizliğini de bozar.
    - **Optional**, bir yöntemin ne zaman **null** döndürmeyi amaçladığını bilmememizden kaynaklanan bu sorunu çözer. Bu sayede, bir değerin mevcut olup olmadığını rahatlıkla kontrol edebilirsiniz².

2. **Optional Kullanımı:**
    - Optional objesi üzerinde `isPresent()` metodunu kullanarak bir nesnenin olup olmadığını kontrol edebilirsiniz. Bu metodun döndürdüğü boolean değer **true** ise nesne mevcuttur ve **false** ise nesne mevcut değildir.
    - Bir nesnenin mevcut olduğu durumlarda nesnenin değerine ulaşmak için `get()` metodunu kullanabilirsiniz. Ancak bu metodun kullanımı **null** değerlerine ait özel durumların yönetilmemesi sonucu **NullPointerException** hatası alınabileceği için tavsiye edilmemektedir.
    - Ayrıca, bir nesnenin mevcut olmadığı durumlarda **default değerler belirleyebilir** veya farklı bir işlem yapılmasını sağlayabilirsiniz. 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

Kaynak: Bing ile konuşma
(1) Java'da Optional Kullanımı » CBT - CodingByTime. https://bing.com/search?q=java+option+nedir.
(2) Java Optional Sınıfı Kullanımı - Kerteriz Blog. https://kerteriz.net/java-optional-sinifi-kullanimi/.
(3) Java'da Optional Kullanımı » CBT - CodingByTime. https://codingbytime.com/javada-optional-kullanimi/.
(4) Java 8 Optional Class Nedir? Kullanım Örneği - Burak Kutbay'ın .... https://blog.burakkutbay.com/java-8-optional-class-nedir-kullanim-ornegi.html/.