こんにちは、働くC#プログラマーのさんさめです。
「例外」はプログラムを書く上で、
決して切り離せない言葉です。
プログラマーはユーザーの手元に
アプリケーションを届けるとき、
可能な限り未処理例外を発生しないように
しておく必要があります。
では、なぜ例外を発生してはいけないのでしょうか?
本記事では、さんさめ個人の心構えを記しておきます。
決して万人に押し付けるようなものではないですが、
1つの意見として参考になれば幸いです。
例外発生を避ける理由その1:作業内容が飛ぶ
ユーザーの手元で例外が発生してしまうと、
そのアプリケーションは強制終了してしまいます。
それが例えばデータ編集ツールだった場合、
保存していない作業内容は失われてしまいます。
「Wordが全く応答しなくなり、
書き途中のレポートが消えた」
こんな経験をしたことが
ある方もいるのではないでしょうか。
つらい…
プログラマーが頑張っていれば、
その人の時間を奪わなくて済んだかもしれない。
使う人の気持ちに立つことで、
「修正しないといけない」と自分を戒めることができます。
他人のため、と言えるかもしれません。
例外発生を避ける理由その2:信頼性が下がる
ユーザーのもとで起きる例外を放置していると、
そのアプリケーションの信頼性は、
見る見るうちに下がっていきます。
ひいては、開発者の信頼性にも影響してきます。
すぐに連絡・対応できる環境であれば
多少は信頼性低下に歯止めをかけられますが、
やはり作る人と使う人には距離があるものです。
不具合が直されないものと認知されてしまうと
「この操作はしないように気を付ける」といった
いわば裏マニュアルのようなものができ始め、
「運用でカバー」が前提となり、
想定と異なる使い方をされはじめます。
その前に報告してくれ~~~
そうなると、アプリケーションが持っていた
本来のパフォーマンスを発揮できないことも多いです。
せっかく作ったアプリケーションが、
不信感を持たれながら使われるのは
やるせない気持ちになりますね。
自分や自分の成果物の評価を無駄に下げないよう、
例外はなるべく避けたいところです。
自分のため、ということですね。
例外発生を避ける理由その3:プログラムとして正しくない
プログラムが例外になる、
ということは、そのプログラムが
何かしら間違っていることを示しています。
- 意図しない入力に対する想定が抜けていた
- 数値を求めるところに文字が入ってきた
- nullが来るとは思ってなかった
- 同時に行ってはいけない操作があった
- コレクション列挙中に要素を増減させた
- データが大量になって初めて顕在化した
- メモリ溢れ
- (例外にならなくとも)極端な動作速度低下
大抵はプログラマーの想定漏れが原因ですが、
単なるテスト不足のこともあります。
いずれにしても共通しているのは、
例外が発生するということは、
APIの使い方が間違っているかもしれないということです。
(※何かあるとすぐ例外を飛ばしまくる
ライブラリなどもありますが)
例外発生時、ものによってはきちんと
どうすべきかをメッセージに出しています。
安易にtry~catchで握りつぶしたりせず、
正しいプログラムを書くことはできないか、
色々検討してみましょう。
try~catchは処理自体も重いので、
事前にif文でチェックするように
変えるだけで、何倍も高速になることも
正しいプログラムを書こうとすれば、
おのずと正しい知識を身に着けることができます。
プログラマーとしての能力のため、
というと調子よすぎでしょうか。
それでも例外は発生する。どう対応するかも重要
どんなに心構えを立派にしても、
プログラムを書くのはまだまだ人間の仕事です。
どうしてもミスは発生してしまいます。
その時には、
「いかに気づけるか?」
「いかに早く直せるか?」
といったことが重要になってきます。
【例外】WPFアプリでエラーを報告してもらうための実装
を使えば、そういう事態への準備ができます。
なるべく、
ユーザーの元で起きた例外に
すぐに気づける環境にしておくことが大事です。
スタックトレース1つでも、
開発者が見ればすぐに直せることがほとんどですね。
まとめ
まとめです。
- ユーザーの手元での例外発生がダメな理由を考察
- その1:作業内容が飛ぶ(他人のため)
- その2:信頼性が下がる(自分のため)
- その3:正しいプログラムではない(プログラマーとしての能力のため)
- 例外が発生してしまったときの準備も重要
最後までお読みいただきありがとうございました。
コメント