れいがい‐しょり〔レイグワイ‐〕【例外処理】
例外処理
例外処理
別名:エラーハンドリング
【英】exception handling
例外処理とは、プログラムの処理中に想定外のエラーが発生した際に実行される、そのエラーへの対処となる処理のことである。
例外処理は、多くの場合、プログラムのデータの損失や、想定されていない処理が入力されたことなどを原因として発生する。例えば、数字が入力されることを想定して作成されたプログラムに、ひらがなが入力されると、プログラムはそれ以上処理を続行できず、エラーとなる。そのようなときに例外処理が実行される。
例外処理の処理内容は、プログラム内にあらかじめ用意しておく必要がある。例外処理が準備されていない場合、エラーが発生した際にどういった反応が起こるか予測できない。無限に入出力を繰り返したり、入力不可能になったりする場合もある。
C++やJavaといったプログラミング言語は、プログラミング言語そのものが例外処理を想定して作られており、例外処理の作成が比較的容易であるとされる。
例外処理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/08/17 05:32 UTC 版)
例外処理(れいがいしょり、英語: exception handling)とは、IT業界で用いられる専門用語で、ある抽象レベルにおけるシステムの設計で想定されておらず、ユーザー操作によって解決できない問題に対処するための処理である。例外処理の結果として問題が解決されないとシステム障害になる。システム停止やデータ破損の原因になり、ユーザーに損害を与える可能性があるため、システム開発で例外処理は重要視されている[1][2][3]。
- ^ a b “第 5 章 例外処理 (C++ プログラミングガイド)”. docs.oracle.com. 2019年10月26日閲覧。
- ^ a b “IPA ISEC セキュア・プログラミング講座:C/C++言語編 第6章 フェイルセーフ:体系だてたエラーハンドリング”. www.ipa.go.jp. 2019年10月26日閲覧。
- ^ a b “エラー処理をパターンにはめよう”. Codezine. 2019年10月26日閲覧。
- ^ Bjarne Stroustrup. “Appendix E: Standard-Library Exception Safety in "The C++ Programming Language" (3rd Edition).Addison-Wesley, ISBN 0-201-88954-4”. 2013年5月1日閲覧。
- ^ “Exception-Safety in Generic Components”. 2013年5月1日閲覧。
- ^ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.asc
- ^ /EH (例外処理モデル)
- ^ ただし、例外処理中にもう一度別のデストラクタから例外が発生してしまうと復帰できなくなるため、デストラクタから例外を発生させるべきではないとされる。
- ^ 例外指定は、 C++関数によって伝達される例外の種類についてプログラマが意図したものを示す言語機能です。 Microsoft Docs Visual C++
- ^ C++17ではこの動的例外仕様が削除される。C++日本語リファレンス
- ^ class StopIteration Ruby 1.9.3 リファレンスマニュアル(2013年10月7日閲覧)。
- ^ 組み込み例外 Python 2.7ドキュメンテーション(2013年10月7日閲覧)。
- ^ module function Kernel.#throw Ruby 1.9.2 リファレンスマニュアル(2013年10月7日閲覧)。
- ^ たとえばCOMではメソッドの戻り値として、MAKE_HRESULT()マクロを用いてHRESULTコードを定義するが、異常系は負数となる。
- ^ CUDAのように列挙型で定義した正の数をエラーコードとして使用するライブラリもある。CUDA Runtime API :: CUDA Toolkit Documentation
- ^ GetFileSize 関数
- ^ GetFileSize function (Windows)
- ^ “C言語規格のドラフト”. 2018年11月21日閲覧。
例外処理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/17 21:54 UTC 版)
「C SharpとJavaの比較」の記事における「例外処理」の解説
Javaは非チェック例外 (unchecked exception) に加えてチェック済み例外 (checked exception) をサポートする。C#では非チェック例外のみである。チェック済み例外は、プログラマがメソッドから発生し得るものを全て宣言し、捕捉する必要がある。 全てのエラーが処理されることを保証できるため、チェック済み例外は非常に便利だとする者もいる。一方、C#の設計者であるアンダース・ヘルスバーグのように、Javaのチェック済み例外はある程度実験的な仕様であり、小さなプログラムでの例を除いては実装する価値を見出せなかった、とする者もいる。一つの批判として、チェック済み例外はプログラマが空のcatchブロックを記述するのを促進し、catch (Exception e) {}のような危険なコードを増やす結果になってしまったというものがある。また別の批判として、メソッドの実装に変更を加えた結果新しいチェック済み例外が発生するようになる可能性があり、これによって契約が破壊されてしまう、というものがある。これは限られた例外のみが宣言されたインタフェースを実装するメソッドや、メソッドの内部実装が変更された場合に起こり得る。中には、このような予期しない例外が発生することを見越し、あらゆる型の例外が発生し得る、と宣言 (throws Exception) するプログラマもいる。これはチェック済み例外の利点を無にしている。しかしながら、いくつかの場面では例外連鎖 (exception chaining)、すなわち捕捉した例外を別の例外でラップして投げ直す、という手法が適用できる。例えば、ファイルにアクセスするコードがデータベースにアクセスするよう変更された場合、呼び出し側は内部で何が行われているかを知る必要がないため、SQLExceptionが捕捉された場合でもIOExceptionとして投げ直すことが可能である。 try-finallyステートメントにおいても両者は異なる。finallyは例えtryブロック内でthrowやreturnが実行された場合でも必ず実行される。これは、try内とfinally内で異なる値がreturnされた場合に予期しない振る舞いを生じることがある。C#ではfinallyブロック内ではreturnやbreakといった文の実行を禁止している。
※この「例外処理」の解説は、「C SharpとJavaの比較」の解説の一部です。
「例外処理」を含む「C SharpとJavaの比較」の記事については、「C SharpとJavaの比較」の概要を参照ください。
- 例外処理のページへのリンク