crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Optional: Null Hatalarına Modern Çözüm
1. Neden Optional Kullanmalıyız?
Geleneksel yöntemde bir metodun null dönüp dönmeyeceğinden emin olamazdık. Bu da her yere if (nesne != null) kontrolleri yazmamıza neden olurdu. Optional ise:
Niyeti Belli Eder: Bir metodun Optional dönmesi, çağıran kişiye "bu değer boş gelebilir, hazırlıklı ol" mesajını verir.
Akıcı Kod: Hata kontrollerini if blokları yerine fonksiyonel metotlarla yapmanızı sağlar.
2. Optional Oluşturma Yöntemleri
Java:
// 1. Boş bir Optional oluşturma
Optional<String> bos = Optional.empty();
// 2. Dolu bir Optional (Değer null ise NPE fırlatır)
Optional<String> dolu = Optional.of("Merhaba");
// 3. Güvenli Oluşturma (Değer null ise otomatik empty() döner) - EN ÇOK KULLANILAN
String isim = null;
Optional<String> guvenli = Optional.ofNullable(isim);
3. Değere Güvenli Erişme Yöntemleri
Optional içindeki veriyi almak için eski usul if kullanmak yerine şu modern yöntemleri tercih ederiz:
A. orElse() ve orElseGet()
Eğer değer yoksa bir "varsayılan" (default) değer dönmesini sağlarız.
Java:
String sonuc = guvenli.orElse("Bilinmiyor"); // Değer null ise "Bilinmiyor" döner.
B. ifPresent()
Eğer değer varsa bir işlem yap, yoksa hiçbir şey yapma.
Java:
guvenli.ifPresent(s -> System.out.println("İsim bulundu: " + s));
C. orElseThrow()
Eğer değer yoksa, belirlediğiniz özel bir hatayı fırlatır.
Java:
String veri = guvenli.orElseThrow(() -> new RuntimeException("Veri bulunamadı!"));
4. Zincirleme İşlemler: filter() ve map()
Tıpkı Stream API'de olduğu gibi Optional üzerinde de filtreleme ve dönüştürme yapabilirsiniz.
Java:
Optional<String> kullanici = Optional.of("admin");
String sonuc = kullanici
.filter(s -> s.length() > 3) // Koşul: 3 karakterden uzunsa devam et
.map(s -> s.toUpperCase()) // Dönüştür: Büyük harfe çevir
.orElse("GEÇERSİZ KULLANICI"); // Değer yoksa veya filtreye takıldıysa bunu dön
System.out.println(sonuc); // Çıktı: ADMIN
Kritik Uyarı: Nerede Kullanılmaz?
Optional her derda deva değildir. Şuralarda kullanmaktan kaçının:
Sınıf Alanlarında (Fields): Sınıfın değişkenlerini Optional yapmayın; bu, nesnenin boyutunu artırır ve serileştirme sorunlarına yol açar.
Metot Parametrelerinde: Bir metoda parametre geçerken Optional geçmeyin; bunun yerine metodun içinde null kontrolü yapın veya Overloading kullanın.
Performans: Çok kritik ve saniyede milyonlarca kez çalışan döngülerde nesne oluşturma maliyeti nedeniyle dikkatli olunmalıdır.
Sonuç
Optional, Java kodunuzu daha okunabilir, daha güvenli ve "null-safe" hale getirir. Projelerinizde metodun bir değer dönmeme ihtimali varsa, null yerine Optional dönmek 2026 standartlarında en profesyonel yaklaşımdır.