イテレーターの作成の一環として、次のコードを作成していることに気付きました(エラー処理を削除)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
読むよりもやや読みやすい
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
私はそれが読みやすさの違いがそれほど圧倒的ではないかもしれない単純な例であることを知っていますが、例外が含まれていないこのような場合にtry-finallyを使用するのが悪いかどうかについての一般的な意見に興味がありますコードを簡素化するときに実際に優先される場合。
悪い場合:なぜ?スタイル、パフォーマンス、落とし穴、...?
結論 あなたのすべての答えに感謝します!(少なくとも私にとって)結論は、最初の例は一般的なパターンであれば読みやすかったかもしれないが、そうではないということだと思います。そのため、目的外の構造を使用することで生じる混乱と、場合によっては難読化された例外フローが、単純化よりも重要になります。
Iterator
であり、実際hasNext()
に動作させるためにはプリフェッチのようなものが必要です。自分で試してみてください。
Iterator
は、値を取得する必要があることですhasNext()
(取得することが、存在するかどうかを確認する唯一の方法であることが非常に多いためです)next()
。
finally
ブロックを使用しません。