こんにちは、質問があります。例外処理とはどういう意味ですか? また、例外処理を使用する必要がある場合と使用しない場合があります。
2 に答える
Googleで例外処理を入力した後の最初のリンクは、私にこれを与えました:-
例外処理は、計算中の例外 (特別な処理を必要とする異常または例外的なイベント) の発生に対応するプロセスであり、通常のプログラム実行の流れを変更することがよくあります。これは、特殊なプログラミング言語構造またはコンピューター ハードウェア メカニズムによって提供されます。
「例外処理」が何を意味するかは言語に依存しますが、通常、プログラムをどこでどのように続行するかの決定を含む、通常のプログラム制御の外側にあるまれな状況 (環境リソース エラーや数値の問題など) を処理するという概念がいくつかあります。このロジックをコードに不都合に織り込む必要がないようにします。
例外処理システムは通常、何らかの方法で例外状況を表します。これは数値コードで構成されるか、オブジェクト指向の方法で例外がプロパティを持ち、継承によって関連付けられるクラスであり、その継承が主要なパターン マッチング メカニズムとして使用されます。適切なハンドラーの検索。
例外処理の実装方法は大きく異なります。一部の例外処理システム、特にハードウェアに実装されているものは、例外処理中にすべてのマシン状態を細心の注意を払って保存し、例外を発生させた命令から正確にプログラムを再開できます。このタイプの例外処理により、仮想メモリは非常に透過的に機能します。
他の例外処理システムは、ハンドラの検索中に「スタックを巻き戻す」ことによってプログラムの状態を破棄します。根底にある仮定は、状況を詳細に回復することはできないということです。可能なのは、リソースを慎重にクリーンアップし、トランザクションのようなコンテキストをロールバックして、完全または部分的に終了することだけです。
PL/I や Common Lisp などの一部の種類の例外システムは、「中間」ソリューションを提供します。オペレーティング システムによって処理される CPU 例外のように、マシンの状態を細心の注意を払って詳細に処理することなく、再開可能な例外です。主な違いは、例外ハンドラーはプログラムが続行されるポイントではなく、例外ハンドラーは巻き戻しが行われる前に呼び出される新しくアクティブ化されたプロシージャであるということです。上位レベルの関数は、下位レベルのコードへの一種のコールバックとして例外ハンドラーを提供できます。これは、上位レベルのコードから下位レベルのコードにまたがるコンテキストを実行して破棄する必要なく呼び出されます。その後、ハンドラーは、状況が発生した下位レベルのコードを続行する方法を決定できます。
例外処理を使用する必要がある場合と使用しない場合は、考慮しているソフトウェアの要件に関して、例外処理の種類 (およびパフォーマンスへの影響の種類) と適用方法によって異なります。これらがすべてわかっている場合でも、意見の余地があります。例外処理システムは、オーバーヘッドが許容範囲内であれば、まったく予期しない状況で使用できます。
たとえば、CPU 例外処理を使用して、欠落しているマシン命令 (またはメモリ アクセスのミスアライメントなどの CPU 機能) をエミュレートできます。このアプローチは、命令の真のハードウェア実装と比較してパフォーマンスが低くなりますが、他の方法では実行できないプログラムを実行できます。これを使用するプログラムが十分なパフォーマンスを持っている場合は、問題ありません。プログラミング言語の例外処理は、そうでなければある種の戻り値テストが適用される多くの状況で潜在的に使用できます。ファイルを最後まで順番に処理する場合、例外によってファイルの終わりを検出できます。このコードは、エラー状態をチェックせずにファイルから 1 単位のデータを読み取ることができると単純に想定しています。データを読み取ることができない場合、例外がスローされ、どこかでキャッチされ、ループが終了します。