エラー処理でやってはいけないこと

プログラムを作成する上でエラー処理の記述は重要である。
エラーが発生した際に、既存のデータに問題が発生しないようにプログラムの処理を終了するように記述するのが普通だと思われる。
場合によってはエラー発生時の処理が始まる前の状況にデータを戻す必要があるかもしれない(トランザクション処理)。

私は長年このように考えて(というか一般的だと思うのだが)プログラムを作成してきたのだが、最近になって一般的ではない処理をする輩が周りに増えてきてしまった。

今回例に挙げるのは「On Error Resume Next」構文。

VBAのリファレンスにもあるので、使ってはいけない構文ではないが、取り扱いに注意が必要。
なんせ、「エラーが出ても無視して先に進みなさい」という命令なのだから。
何のチェックもなしに直後で「On Error Goto 0」とやっていたら、迷わずコメントアウト。

私が過去に取り扱ったツールで、この構文がプログラム中に何十か所も入ったものを改修で担当することになり、かなり苦労した覚えがある。
最終的にはこの構文は全てコメントアウトした。
他の場所で発生したエラーがこの構文のせいでスルーされて、全く関係ない場所でエラーが発生し、何が何だか訳が分からなくなってしまい、元凶を突き止めるのに苦労したのである。

これをやったのがSIerで勘定系も手掛けたことがあると言っている『自称「プログラミング上級者」』。
勘定系でこんないい加減なエラー処理してもいいのだろうか?
即クビになりそうなものだが。
まあ『自称』が言っていることだから当てにならない。
他にも粗を探せばいろいろあるが、それは別の機会に。

On Error Resume Next」 を使うなということではない。
これを使う場合というのは「回避不可能なエラーが発生する」からだと思われるのだが、そのエラー状況も確認しないで無視して復帰させているという点がおかしいということ。
もしかしたら、想定していない別のエラーかもしれないのに、チェックもせずに無視して先に進むなんてあり得ない。

例え「回避不可能なエラー 」だと思っても、リリースまでには回避方法を見つけて対応するというのがプログラマの腕の見せ所だろう。
実際これまで「回避不可能なエラー 」と思われたものが何度かあったが、最終的には対処方法を見つけて「On Error Resume Next」構文 を撤去してきた。
私がリリースしたツールでは使われていない(はず)。
これもプログラム技術・スキルだと思うのだが。

どうも理解できない人たちがいるようだ。

愚痴っぽくなってしまった・・・

Leave Comment