🚒

ループ処理の中で例外処理すべき?

2023/04/13に公開

概要

for文の中や外でtry-catch文を書くことが最近よくあり、どちらがいいのかわからなくなったのでまとめてみました。

1. for文の外にtry-catch文がある場合


try {
   for (int = 0; i < X; i++) {
	// 例外が発生しうる処理
   }
} catch (Exception e) {
	// 例外発生時のフォロー処理
}

いつ使う?

例外発生時にfor文自体を中断させたいとき。
for文のどこかでこけたら、catchされるというのが明確。

2. for文の中にtry-catch文がある場合

for (int = 0; i < X; i++) {
    try {
	// 例外が発生しうる処理
    } catch (Exception e) {
	// 例外発生時のフォロー処理
    }
}

いつ使う?

ループ処理を継続したい/しなければいけないとき。

例えば下記の様に、複数のユーザーにメールを一括送信しないといけない場面など。
他の処理を道連れにできないときに使う感覚でしょうか。

foreach ($users as $user) {
    try {
        // 1人のユーザーの送信処理でミスがあっても他の人には送りたい
	sendMail($user);
    } catch (Exception e) {
	// 例外発生時のフォロー処理
    }
}

まとめ

try-catch文はfor文の外または中の、どちらが絶対に良いという訳ではない。
そのプログラムに応じて、例外発生時にはどう動いてほしいかを明確にして使い分けることが大事。

Discussion