Open8

Swift 6 Typed throws

ykwsykws

Untyped throws だと any Error が返るので、全ての catch が必要になっていた
Typed throws だと Error の型を指定できる

ykwsykws
  • Typed throws の括弧は必須。 async await などの effect と区別ができない
  • 複数のエラーは定義できない。 catch する側で複数あると困る。複数あっても rethrow するだけになりがちなのでない方がシンプルで関数の設計面でも良いのでは
ykwsykws

Typed throws は安易に使うべきではない

ykwsykws

Typed throws は戻り値の型と同じ意味を持つので、それを強制したい時であれば有効である
Result 型にも同様のことは言える

ykwsykws
  • Simple domain errors: エラーの原因が明確ですぐに判断・処理できるもの。 guard で十分
  • Recoverable errors: エラーの原因が多岐に渡る場合。原因に応じてハンドリングが必要 do-try-catch
  • Univeral errors: OOM などエラーハンドリングができないもの
  • Logic failures: コードの誤りが原因。動的に修正するのではなく、コードを修正できるように precondition などを利用する