エラー処理色々

エラーって何?っていうと正常処理に対しての異常処理ですね。
例外処理とも言ったりします。言語によっては例外処理機構なんてのもあります。また、エラー値を返すためにmaybeモナドなんてのもあります。
オブジェクトの場合はnullかオブジェクトかで処理が変わるとか。CPUはnullポインタにアクセスすると割り込みを発生させたりします。ゼロで割った場合にも割り込みが発生したりします。浮動小数点数にはNaNなんていう値があったりもして、おかしくなったらNaNとかにすることもあります。というように、エラー処理をするためのハードウェア的な機構とソフトウェア的な機構がいろいろあります。

エラー処理は入力値によってチェックしないといけないとかいうのもあります。
例外処理を使った場合と関数値の返り値をチェックする方法もあります。
関数がネストして呼ばれている場合に、子の関数のエラーを親にそのまま返したり、自分で処理できるものは処理して親には正常に動いてますと報告したり、異常のパターンをまとめて返したり、異常をより詳しくチェックして返したり出来ます。
ハードウェア的な制限によって、異常が発生したりします。メモリ不足、スタックオーバーフロー、ディスク容量不足、ファイル書きこめないエラー、メモリ書きこめないエラー、ハードウェアがつながっていないエラー、通信出来ないエラー、通信上でデータがおかしくなったエラーいろんな外部の要因によってエラーは発生します。

有る一定条件ではエラーが発生してしまうので、使う側でエラーチェックをしてエラーが発生しないように呼び出すということをしたりします。
高速に動作させたい場合には、エラーチェックしないほうがいい場合もあります。数字の範囲を超えたらループして元に戻っちゃうとかですね。
値を追加する命令や足し算の命令でも、元に戻っちゃうパターンとエラー状態になるパターンと、最大値でカウントストップするパターンがあります。
握りつぶした結果、状況が悪化していくこともあります。
リソースをロックすればマルチタスク環境ではデッドロックが発生したりします。エスケープ処理を怠ると、おかしなことになります。

と、とにかく、異常処理は沢山の概念やらなにやらがあり、メンドクサイわけです。メンドクサイから辞める。では、続きませんから、メンドクサイからパターン化してしまって対応すると速くていいです。

次回はとりあえず今回出したエラーについて構造化してまとめてみたいと思います。