0Pricing
Java Academy · Ders

Optional Oluşturma ve İnceleme

Optional.of, ofNullable, empty, isPresent, isEmpty ve get yöntemlerini güvenli biçimde kullanın.

Optional Oluşturma ve İnceleme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Optional Oluşturma ve İçeriğini İnceleme

Bu derste Optional örnekleri oluşturma ve içeriklerini inceleme yöntemleri ele alınır: isPresent, isEmpty, get ve güvenli seçenekler.

Optional Oluşturmanın Üç Yolu

Optional'ı Optional.of(), Optional.ofNullable() veya Optional.empty() ile oluşturun.

import java.util.Optional;

// 1. of: must be non-null
Optional<String> a = Optional.of("hello");

// 2. ofNullable: safely wraps null
String maybeNull = null;
Optional<String> b = Optional.ofNullable(maybeNull); // empty
Optional<String> c = Optional.ofNullable("world");   // present

// 3. empty: explicitly empty
Optional<Integer> empty = Optional.empty();

System.out.println(a.isPresent()); // true
System.out.println(b.isPresent()); // false
System.out.println(c.isEmpty());   // false

isPresent ve isEmpty

isPresent(), bir değer varsa true döndürür. isEmpty() (Java 11 ve sonrası) bunun mantıksal tersidir.

import java.util.Optional;

Optional<String> opt = Optional.of("Java");

System.out.println(opt.isPresent()); // true
System.out.println(opt.isEmpty());   // false

Optional<String> empty = Optional.empty();
System.out.println(empty.isPresent()); // false
System.out.println(empty.isEmpty());   // true

// Prefer ifPresent() over if (isPresent()) get() — more readable
opt.ifPresent(v -> System.out.println(v.toUpperCase())); // JAVA

get(): Dikkatli Kullanın

get(), değeri döndürür veya NoSuchElementException fırlatır. Öncesinde denetlemeden bunu asla çağırmayın.

import java.util.Optional;

Optional<String> opt = Optional.of("present");
System.out.println(opt.get()); // present

Optional<String> empty = Optional.empty();
try {
    empty.get(); // NoSuchElementException!
} catch (java.util.NoSuchElementException e) {
    System.out.println("No value!");
}

// Better pattern: always use orElse/orElseGet/orElseThrow
// instead of isPresent() + get()

orElse ve orElseGet

orElse(default), boşsa varsayılanı döndürür. orElseGet(supplier), sağlayıcıyı geç değerlendirmeyle çağırır — maliyetli varsayılanlar için daha iyidir.

import java.util.Optional;

Optional<String> plan = Optional.empty();

// orElse: default value always evaluated
String basic = plan.orElse("FREE");
System.out.println(basic); // FREE

// orElseGet: supplier only called when empty (lazy)
String lazy = plan.orElseGet(() -> {
    System.out.println("Computing default...");
    return "FREE";
});
System.out.println(lazy); // Computing default... FREE

// When present, orElseGet supplier is NOT called
Optional.of("PRO").orElseGet(() -> {
    System.out.println("Not called!");
    return "FREE";
}); // silent — present, no computation needed

orElseThrow

orElseThrow(), boşsa NoSuchElementException veya özel bir istisna fırlatır. Yokluk gerçekten bir hataysa bunu kullanın.

import java.util.Optional;

Optional<String> userId = Optional.empty();

// Default: throws NoSuchElementException
try {
    userId.orElseThrow();
} catch (java.util.NoSuchElementException e) {
    System.out.println("Empty!");
}

// Custom exception
try {
    userId.orElseThrow(() -> new IllegalStateException("User ID required"));
} catch (IllegalStateException e) {
    System.out.println(e.getMessage()); // User ID required
}

ifPresent ve ifPresentOrElse

Bu yöntemler, değeri çıkarmadan üzerinde işlem yapmanızı sağlar. Yan etkiler için temiz bir yaklaşımdır.

import java.util.Optional;

Optional<String> username = Optional.of("alice");

// ifPresent: callback only when present
username.ifPresent(u -> System.out.println("Welcome, " + u));
// Welcome, alice

Optional<String> missing = Optional.empty();

// ifPresentOrElse (Java 9+): callback or else action
missing.ifPresentOrElse(
    u -> System.out.println("Hello " + u),
    () -> System.out.println("Anonymous user")
);
// Anonymous user

String Varlığını Denetleme

Yaygın bir kullanım: bir yapılandırma metni bulunmadığında veya boş olduğunda varsayılan bir değer döndürmek.

import java.util.Optional;

static Optional<String> getConfig(String key) {
    // Simulate config lookup
    return Optional.ofNullable(System.getenv(key));
}

String port = getConfig("PORT").orElse("8080");
String host = getConfig("HOST").orElse("localhost");

System.out.println("Server: " + host + ":" + port);
// Server: localhost:8080 (when env vars not set)

Alternatif Optional'lar için Optional.or()

or() (Java 9 ve sonrası), Optional mevcutsa onu, değilse bir sağlayıcı tarafından verilen başka bir Optional'ı döndürür.

import java.util.Optional;

static Optional<String> findInCache(String key)   { return Optional.empty(); }
static Optional<String> findInDatabase(String key) { return Optional.of("Alice"); }

Optional<String> result = findInCache("user:1")
    .or(() -> findInDatabase("user:1"));

System.out.println(result.get()); // Alice

// Useful for fallback chains:
Optional<String> value = Optional.empty()
    .or(() -> Optional.empty())
    .or(() -> Optional.of("final fallback"));
System.out.println(value.get()); // final fallback

Koşullu Varlık için filter

filter(predicate), değeri yalnızca predicate koşulunu karşılıyorsa korur; aksi durumda boş döndürür.

import java.util.Optional;

Optional<Integer> age = Optional.of(17);

Optional<Integer> adult = age.filter(a -> a >= 18);
System.out.println(adult.isPresent()); // false (17 is not >= 18)

Optional<Integer> age2 = Optional.of(25);
Optional<Integer> adult2 = age2.filter(a -> a >= 18);
System.out.println(adult2.get()); // 25

// Chain: find active premium user
Optional<User> premiumActive = findUser(id)
    .filter(u -> "PRO".equals(u.plan()))
    .filter(u -> u.isActive());

Uygulama: Fallback ile Kullanıcı Arama

Gerçekçi bir kullanıcı arama senaryosunda isPresent, orElse ve ifPresentOrElse yöntemlerini bir arada kullanma.

import java.util.Optional;

record User(long id, String name, String email) {}

static Optional<User> findById(long id) {
    return id == 1 ? Optional.of(new User(1, "Alice", "alice@co.com"))
                   : Optional.empty();
}

static void displayUser(long id) {
    findById(id).ifPresentOrElse(
        u -> System.out.println("Found: " + u.name() + " <" + u.email() + ">"),
        () -> System.out.println("User " + id + " not found")
    );
}

displayUser(1);  // Found: Alice <alice@co.com>
displayUser(99); // User 99 not found

Hızlı Kontrol

orElseGet(), orElse()'den farklı olarak ne yapar?

Özet: Optional Oluşturma ve İçeriğini İnceleme

Temel çıkarımlar:

  • Optional.of() boş olmayan bir değer gerektirir; Optional.ofNullable() boş değeri kabul eder
  • isPresent() / isEmpty() varlığı denetler; denetlemeden get() çağırmaktan kaçının
  • Ucuz varsayılanlar için orElse(); maliyetli hesaplanan varsayılanlar için orElseGet()
  • Yokluk bir hataysa orElseThrow()
  • Değeri çıkarmadan yan etkiler için ifPresent() ve ifPresentOrElse()
  • filter(), yalnızca predicate başarılı olursa değeri korur; or(), yedek Optional'ları zincirler

Sıkça Sorulan Sorular

“Optional Oluşturma ve İnceleme” dersi ücretsiz mi?

Evet — “Optional Oluşturma ve İnceleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Optional Oluşturma ve İnceleme” dersinde ne öğreneceğim?

Optional.of, ofNullable, empty, isPresent, isEmpty ve get yöntemlerini güvenli biçimde kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Optional Oluşturma ve İnceleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Optional Neden Var?
  2. Optional Oluşturma ve İnceleme
  3. Optional Dönüşümleri: map ve flatMap
  4. Optional için En İyi Uygulamalar
← Java Academy Sayfasına Dön