try、try?、try! の使い分け

Swiftのエラー処理において、trytry?try! は、エラーをスローする関数(throws を付けた関数)を呼び出す際の3つの異なる方法です。これらの使い分けを理解することは、安全で明確なコードを書くうえで重要です。


1. try:通常のエラーハンドリング

説明:

  • do-catch文の中で使用し、エラーが発生する可能性のある関数を呼び出します。

  • エラーがスローされた場合は catch ブロックで処理します。

使用例:

swift
func readFile() throws -> String { // エラーをスローする可能性のある処理 return "ファイルの内容" } do { let contents = try readFile() print(contents) } catch { print("ファイルの読み込みに失敗しました: \(error)") }

特徴:

  • 最も安全で推奨される方法。

  • エラーに応じた処理を明確に記述できる。


2. try?:エラー時に nil を返す

説明:

  • エラーが発生した場合、その結果を nil として扱います。

  • Optional 型として返されるため、後で if letguard let でアンラップして使います。

使用例:

swift
func readFile() throws -> String { // エラーをスローする可能性のある処理 return "ファイルの内容" } if let contents = try? readFile() { print(contents) } else { print("ファイルの読み込みに失敗しました") }

特徴:

  • エラーを無視したいときに有効。

  • エラーの詳細にはアクセスできない。

  • 処理を簡潔にしたい場合に使われる。


3. try!:エラーが発生しないことを確信して使う

説明:

  • エラーが発生した場合にクラッシュ(ランタイムエラー)します。

  • 関数が絶対に成功することが保証されている場合にのみ使用すべきです。

使用例:

swift
func readFile() throws -> String { return "ファイルの内容" } let contents = try! readFile() print(contents)

特徴:

  • 安全性が最も低い。

  • 実行時にクラッシュする可能性があるため、使用には細心の注意が必要。

  • テストコードやプロトタイピング時などに一時的に使われることが多い。


まとめ

書き方 エラー発生時の挙動 エラーの扱い 安全性 主な用途
try catchで捕捉 明示的に処理可能 通常のエラーハンドリング
try? nil を返す 処理されず無視される 簡易なOptional処理
try! プログラムがクラッシュする 処理されない 成功が確実な処理

生成日:2025/05/04