0Pricing
Swift Academy · Ders

Hatalar ve Erken Dönüşlerle defer

Hata fırlatıldığında veya erken dönüldüğünde bile temizlemenin yapılmasını sağlayın.

Hatalar ve Erken Dönüşlerle defer, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. 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, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

defer return'de Çalışır

Bir defer bloğu, işlev return aracılığıyla erken sona erse bile çalışır.

func check(_ value: Int) {
    defer { print("cleanup ran") }
    if value < 0 {
        print("negative, returning early")
        return
    }
    print("value is", value)
}
check(-5)

Her Yolda Temizleme

Hangi return çalışırsa çalışsın, ertelenen temizleme tam olarak bir kez çalışır.

func classify(_ n: Int) {
    defer { print("done classifying") }
    if n == 0 { print("zero"); return }
    if n > 0 { print("positive"); return }
    print("negative")
}
classify(0)

defer throw Sırasında Çalışır

Bir işlev hata fırlattığında, kaydedilmiş defer'ler kapsam geri alınırken yine çalışır.

enum MyError: Error { case bad }
func risky(_ fail: Bool) throws {
    defer { print("cleanup on the way out") }
    if fail { throw MyError.bad }
    print("no failure")
}
try? risky(true)

return ve throw'u Birleştirme

İşlev normal biçimde dönse de hata fırlatsa da aynı defer çalışır.

enum E: Error { case oops }
func op(_ flag: Bool) throws -> Int {
    defer { print("op finishing") }
    if flag { throw E.oops }
    return 42
}
let r = try? op(false)
print(r ?? -1)

Hata Yayılmadan Önce Temizleme

defer, fırlatılan hata çağırana ulaşmadan önce çalışır; böylece kaynaklar önce serbest bırakılır.

enum E: Error { case fail }
func load(_ broken: Bool) throws {
    print("open")
    defer { print("close") }
    if broken { throw E.fail }
    print("read")
}
do {
    try load(true)
} catch {
    print("caught:", error)
}

defer ile guard Kullanımı

Yaygın bir kalıp şudur: kaynağı alın, temizlemeyi defer ile planlayın, ardından erken dönüşler kullanan guard ile denetleyin; bu dönüşler yine de temizlemeyi tetikler.

func process(_ items: [Int]) {
    print("start")
    defer { print("finished") }
    guard !items.isEmpty else {
        print("nothing to do")
        return
    }
    print("processing", items.count, "items")
}
process([])

defer ve Hata Fırlatan Döngüler

Döngü içindeki bir defer, sonraki bir ifade hata fırlatsa bile her yinelemenin sonunda çalışır.

enum E: Error { case stop }
func loop() throws {
    for i in 1...3 {
        defer { print("end", i) }
        if i == 2 { throw E.stop }
        print("body", i)
    }
}
try? loop()

Erken return ile Sıra

Birden çok defer, erken dönüşte bile LIFO sırasıyla çalışır.

func multi(_ skip: Bool) {
    defer { print("A") }
    defer { print("B") }
    if skip { return }
    print("body")
}
multi(true)

Başarısızlık Durumunda Kayıt Tutma

Tüm çıkış yollarında tamamlanmayı veya başarısızlığı tutarlı biçimde loglamak için defer kullanın.

enum E: Error { case bad }
func attempt(_ fail: Bool) throws {
    var success = false
    defer { print("attempt success:", success) }
    if fail { throw E.bad }
    success = true
}
try? attempt(true)

throw Sırasında Durumu Geri Yükleme

defer, bir işlem hata fırlattığında geçici durumu geri almak için idealdir.

enum E: Error { case fail }
func transaction(_ fail: Bool) throws {
    var inProgress = true
    defer { inProgress = false; print("inProgress:", inProgress) }
    if fail { throw E.fail }
    print("committed")
}
try? transaction(true)

En İyi Uygulama

Erken dönüşlardan ve fırlatılan hatalardan sonra da çalışması gereken temizlemeler için defer'e güvenin; böylece hiçbir çıkış yolu kaynakları sızdırmaz.

enum E: Error { case x }
func safe(_ fail: Bool) throws {
    print("acquire")
    defer { print("release") }
    if fail { throw E.x }
    print("use")
}
try? safe(true)

Hatalar ve Dönüşlerle Hızlı Kontrol

defer kullanımını hatalar ve dönüşlerle sınayın.

Özet

defer, erken return ve fırlatılan hata da dâhil olmak üzere her kapsam çıkışında çalışır ve hata yayılmadan önce yürütülür. Bu, LIFO sırası korunarak tüm çıkış yollarında temizleme ve durum geri yükleme için güvenilir bir yer sağlar.

func f(_ skip: Bool) {
    defer { print("cleanup") }
    if skip { return }
    print("work")
}
f(true)

Sıkça Sorulan Sorular

“Hatalar ve Erken Dönüşlerle defer” dersi ücretsiz mi?

Evet — “Hatalar ve Erken Dönüşlerle defer” 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 Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Hatalar ve Erken Dönüşlerle defer” dersinde ne öğreneceğim?

Hata fırlatıldığında veya erken dönüldüğünde bile temizlemenin yapılmasını sağlayın. Swift 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.

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

Önceden deneyim gerekmez. CoddyKit'te Swift 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 4. dersidir.

“Hatalar ve Erken Dönüşlerle defer” 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 Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift 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. defer Nasıl Çalışır
  2. Birden Çok defer Bloğunun Sıralaması
  3. Kaynak Temizleme için defer
  4. Hatalar ve Erken Dönüşlerle defer
← Swift Academy Sayfasına Dön