前回の投稿からやや時間が空いてしまいましたが、前回に引き続きVB6での開発のお話です。前回は、主にシステムの前提制約とVB6の特徴、そしてプロジェクトの分割と共通クラスを用いてポリモーフィズムを使用した時のように、該当プロジェクト固有の値を使って共通クラスで処理させる方法を書きました。VB6でオブジェクト指向プログラミングはどこまでできるか?今回は、以下のVB6の特徴の4番を使用したエラー処理について主に書きたいと思います。提供される機能はカプセル化のみで継承、ポリモーフィズムはサポートされない。モジュールには変数と静的なプロシージャのみ定義できる。静的クラスのような使い方ができる。Formはクラスであり、newしてインスタンスを生成できる。インスタンス化しなくても使用できる。Error~を用いることで例外補足が可能。自分で定義した構造体をプロシージャの引数に取ることはできない。要素数0の配列を定義できない。コレクションが使用できる。速度は配列より速いとのこと。コレクションはJavaのジェネリクスのように要素の型を指定できない。コレクションを引数にするとプロシージャ側から見ると何が格納されているかは保証されない。10進数の計算で精度が必要な場合には、Variant型の変数にCDec関数で数値をDecimal型に変換して格納する。Decimal型の変数は定義できない。エラー処理をプロシージャ毎に書いていたのでは記述が冗長なばかりか、エラーハンドリングに変更を加えたい場合に工数が膨らみます。そこで、エラー処理を共通化する試みをしました。方法は単純で共通のプロシージャを用いるということです。Subというように書きます。・サブプロシージャを呼び出した後は必ずエラー有無の確認を行う。ラベルを定義し、特に処理がなくても全プロシージャでテンプレートのように使用する。EXE全体のエラー管理及びエラーリスト処理クラスのデータとして用いる。構造体で定義するとコンパイルエラーとなる為、クラスで定義する。実行時エラーなどを独自に定義したメッセージに変換する処理などを行う。Error句を用いるとErrオブジェクトがクリアされるので用いない。Subこうすることで、VB6であってもエラー処理をビジネスロジックと分離し管理できるようになります。Programming)が生まれた目的と同じで、ソフトウェア全体を横断する関心事を分離するものです。9999(独自に定義した数値)」などとして実行時エラーを発生させ、最上位の呼び出し元で補足して処理するという方法もあります。GoTo~などのエラー処理ルーチンを終了すると、Errオブジェクトがクリアされてしまうので、補足するのはあくまで最上位の呼び出し元のみとする必要があります。これだと、記述量が少なくシンプルになります。Errオブジェクトをクリアしないように気をつける必要があるので、小規模案件や少人数のプロジェクト向きかもしれません。このように、共通クラス定義や広域変数でのインスタンス保持、プロジェクト分割、チーム内のルールや規約などを組み合わせることで、モダンな言語が備える問題の分割や処理の共通化の仕組みをある程度実現できます。言うまでもなく、言語仕様に元々分割、共通化の仕組みが備わっている方がコードの統括、見通しの良さ共に良いのであくまでもなんらかの事情によりVB6の採用が最適解である場合のコード整理の仕方ということで参考になればと思います。エラー処理については以上です。他のトピックについても書いていきたいと思います。