Menu
Coddy logo textTech

try? ve try!

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

Bazen bir işlevin hangi hatayı fırlattığını önemsemezsin; yalnızca bir sonuç veya bir yedek değer istersin. Swift sana iki kısa biçim sunar.

try? fırlatılan herhangi bir hatayı nil değerine dönüştürür. Sonuç, işlevin dönüş türünün bir Optional değeridir:

enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }

let result = try? risky()        // nil
let safe   = (try? risky()) ?? 0 // 0

Satır içi bir varsayılan değer için bunu ?? ile birlikte kullanın. Bu, "bu şeyi çağır, her iki durumda da bana bir değer ver" ifadesinin en kısa hâlidir.

try! “Bunun hata fırlatmayacağını biliyorum” der. Fırlatırsa programınız çöker. Bunu yalnızca çağrının güvenli olduğunu kanıtlayabildiğinizde kullanın; günlük kodlarda, bir geri dönüş değeriyle birlikte try? kullanımını veya tam do/catch yapısını tercih edin.

challenge icon

Görev

Kolay

Tek bir bad durumu içeren NumError: Error tanımlayın. Şunları yapan, hata fırlatan bir parseEven(_ s: String) throws -> Int tanımlayın:

  • s değeri Int olarak ayrıştırılamadığında veya ayrıştırılan değer tek olduğunda .bad fırlatır
  • Aksi takdirde ayrıştırılan tamsayıyı döndürür

Tek bir girdi satırı okuyun: virgülle ayrılmış bir dizeler listesi. Her biri için, ayrıştırılmış çift tamsayıyı veya -1 değerini elde etmek üzere try? ve ardından ?? -1 kullanın.

Ortaya çıkan tamsayıları sırayla , ile birleştirerek yazdırın. Ardından ikinci satırda -1 olarak dönen değerlerin sayısını yazdırın.

4,7,abc,8,11,2 girdisi için çıktı şöyledir:

4,-1,-1,8,-1,2
3

Kendin dene

let parts = readLine()!.components(separatedBy: ",")

// TODO: enum NumError; func parseEven(_:) throws -> Int;
// her bir parça için, (try? parseEven(part)) ?? -1
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