8章例外

 操作は失敗することがあります。プログラムが外部装置に格納されたファイルからデータを読み込んでいる最中に、誰かがそのドライブの接続を外してしまうこともあります。アプリケーションが配列を生成しようとしたら、システムに十分な空きメモリがないことがわかることもあります。断続的な無線ネットワーク接続では、ネットワーク要求が失敗することもあるでしょう。プログラムでこの種の失敗を検出するために広く使われている方法の1つは、それぞれのAPIでその操作が成功したかどうかを示す値を返すことです。この方式では、すべての操作の返り値をプログラムで確認する必要があるので、開発者がすべてのエラーを検出しているかどうかに注意を払わなければいけません。これは確かに実現可能な戦略ですが、コードがわかりにくくなってしまいます。何も問題がないときに実行される作業の論理的手順がエラーチェックの中に埋もれ、コードが保守しにくくなります。C#は、この問題を軽減できる有名な別のエラー処理機構をサポートしています。それは例外です。

 APIの失敗が例外で報告されると、通常の実行の流れを中断して、最も近くの適切な例外処理コードの中に直接移動します。これにより、エラー処理のロジックと実際の処理を実行するコードをある程度分離できます。これにはコードが実行する可能性のあるすべての経路がわかりにくくなってしまうという負の側面もありますが、コードが読みやすく、保守しやすくなります。

 例外は、返り値が役に立たないような操作でも問題を報告できます。例えば、ランタイムは、参照を使うといった単純な基本操作でも問題があることを検出して報告できます。参照型の変数はnullを持つことができ、null参照に対してメソッドを呼び出そうとすると失敗します。ランタイムはこれを例外で報告します。 ...

Get プログラミングC# 第8版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.