Menu
Coddy logo textTech

throws ve Error

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 44 / 56.

Swift, fonksiyonların hata verebileceğini bildirmesini sağlayarak hataları yönetir. Fonksiyon gövdesi bir hata değeri fırlatır; çağıranın bunu ele alması gerekir.

Bir hata türü, yerleşik Error protokolüne uyan herhangi bir şeydir. Kendi hata türünüzü bildirmenin en basit yolu bir enum kullanmaktır:

enum InputError: Error {
    case empty
    case tooLong
}

Hata fırlatan bir fonksiyon, imzasında throws anahtar kelimesini ve gövdesinde throw ifadesini kullanır:

func validate(_ s: String) throws -> String {
    if s.isEmpty { throw InputError.empty }
    if s.count > 100 { throw InputError.tooLong }
    return s
}

Hata fırlatan bir fonksiyonu (throwing function) doğrudan çağıramazsınız, derleyici sizi hatayı ele almaya zorlar. Bir sonraki ders bunun nasıl yapılacağını anlatıyor.

challenge icon

Görev

Kolay

İki durum içeren bir NumError: Error enum'u tanımla: negative ve tooBig.

Şu işlemleri yapan, hata fırlatan bir doubleSafely(_ n: Int) throws -> Int fonksiyonu tanımla:

  • n < 0 olduğunda .negative fırlatır
  • n > 100 olduğunda .tooBig fırlatır
  • Aksi takdirde n * 2 döndürür

stdin'den tek bir tam sayı oku. doubleSafely fonksiyonunu bir do/catch bloğu içinde çağır (kesin biçimini bir sonraki derste öğreneceksin; şimdilik şu iskeleti aynen kullan):

do {
    let result = try doubleSafely(n)
    print("ok: \(result)")
} catch NumError.negative {
    print("negative")
} catch NumError.tooBig {
    print("too big")
} catch {
    print("unknown")
}

10 girdisi için çıktı ok: 20 olur. -1 için negative olur. 500 için too big olur.

Kendin dene

let n = Int(readLine()!)!

// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground