Swift Optionals: nil Güvenliği ve Unwrapping Tuzakları

Swift'in en güçlü özellikleri arasında optionals (opsiyoneller) vardır. Bir değişken `nil` (boş/tanımsız) olabilir mi sorusuna kesin cevap vermeyi zorunlu kılar. Bu, çoğu dilde yaşanan "null reference" hatalarını baştan engeller.

Diyelim bir fonksiyon kullanıcı ID'sini arar. Bulmazsa ne döner? Swift'te bunu açıkça tanımlamalısın: ya bir değer var, ya da yok. bu durum `Optional` türüyle ifade edilir.

1let age: Int? = nil // Optional Int, nil olabilir
2let name: String? = "Ali" // Optional String, değeri var

Soruşturmak istersen: `age` değişkeni `Int?` türündedir, "belki bir tamsayı, belki değil" anlamına gelir.

1. Force Unwrapping (Tehlikeli)

1let age: Int? = 25
2print(age!) // Çıktı: 25
3
4let empty: Int? = nil
5print(empty!) // CRASH! Fatal error

Eğer `nil` değere `!` uygulanırsa program çöker. Sadece 100% emin olduğunda kullan.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

2. Optional Binding (Güvenli)

1let age: Int? = 25
2
3if let unwrappedAge = age {
4print("Yaş: \(unwrappedAge)") // Çıktı: Yaş: 25
5} else {
6print("Yaş bilinmiyor")
7}

Değer varsa `unwrappedAge` içine koyar; yoksa `else` bloğu çalışır. En güvenli yol budur.

3. Nil Coalescing (Varsayılan Değer)

1let age: Int? = nil
2let displayAge = age?? 0 // nil ise 0 kullan
3print(displayAge) // Çıktı: 0
1let user: [String: Any]? = ["name": "Ahmet", "age": 30]
2let name = user!["name"]! // İki!, çok riskli!

Bu kodu yazarsan, `user` ya da sözlük içi `nil` olduğunda crash olur. Bunun yerine:

1if let user = user, let name = user["name"] {
2print(name) // Güvenli
3}

`!` operatörü sadece test kodunda veya çok nadir durumlarda kullan. Gerçek uygulamada `if let`, `guard let` veya `??` tercih et. Swift'in amacı tam da budur: nil hatalarını compile zamanında yakalamak.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz