セオリーと思っていたのだが

 2年ほど前であろうか、シンクタンクと合併したベンダーのセミナーに行った。VisualBasic入門だそうだ。その一時間目、講師はものすごいことを言っていた。
「これはフォームをクローズする時に発生するイベントですが、このとき処理することはありません、、、ほとんどありません」
 これが、パブリックなセミナーであれば黙っていただろう。が、会社が団体で申し込んだセミナーなので、いきなり異を唱えた。「ちがう。終了処理をそこに書く。」

 つまり、メインフォームを閉じるというイベントにプログラム全体の終了処理を紐つけるのだ。決して「閉じる」のボタンをクリックすると終了処理が走るようにプログラムを書いてはならない。こんなの基本中の基本だと思っていたんだが、そうではないらしい。
 趣味でやっているサンデープログラマがそんなことを言っているのであれば、優しく教えてあげれば済むことであるが、日本で5本の指に入る情報サービス業の会社の、しかも開発言語の講師がこんなことを言っていることは無視できない。(といいながら忘れていましたが。)

 なぜ終了処理をメインフォーム終了イベントに紐つけなければならないか。言われてみれば単純である。Windowsにはアプリケーションを終了させるのにいくつかのやり方があるからだ。

  1. OSごと終了する。
  2. Ctrl+Alt+Deleteで表示されるタスクマネージャから終了させる。
  3. メニューから「閉じる」を選ぶ。
  4. 右上の[×]ボタンをクリックする。
  5. タスクバーのポップアップメニューから「閉じる」を選択する。
  6. ショートカットキーAlt+F4を押す。
  7. 用意されていれば、アプリケーションの[終了]メニューを選択する。
  8. 用意されていれば、アプリケーションの[終了]ボタンをクリックする。
 終了ボタンにアプリケーションの終了処理を紐つけて問題がないのは、最後のものだけである。OS、Windowマネージャーの機能で終了される場合には全く意味がない。全てにおいて必ず実行される終了処理は、メインフォーム終了イベントに終了処理を紐つけなければならない。(それでも、OSから落とす場合は保証されまいが。)

 そんな関係で、この会社にシステム開発をお願いしては駄目だな、と個人的に思って終わりにしていたのだが・・・ひょっとして「終了処理を[終了]ボタンに紐つける」と考えている人、結構多くないのだろうか。少なくとも外部からお金を取る講師がこう教えていたんだ。あまりにも常識はずれと忘れていたが。

 まあ、トランザクションを別のミドルウェアに任せてしまえば、終了処理をすべきではあるがほっぽっといても問題がないものが大半であろう。ファイルをクローズし損ねてもそのうちOSが何とかしてくれるかもしれないし、せいぜいオブジェクトを廃棄し損なってメモリリークが発生する程度。そのうちリブートすれば何とかなろう。
 しかし、例えばダイアルアップをするプログラムで、終了処理に「回線切断」を入れているとすれば・・・普通に[×]ボタンのクリックで終了して安心していたとすると・・・電話代が・・・お、おそろしい。

コンピュータネタ、目次
ホーム