メソッド呼び出し時にモジュール名の記述を強制する

画期的なアイディア(嘘)

akashi-keirin.hatenablog.com

このときに、

モジュール名を指定しないと使えない、とかだったら便利だと思ったんだけどなあ。

とか書いていたんだが、画期的な解決法が思い浮かんだので記しておく。

同一メソッドを持つダミーモジュール

akashi-keirin.hatenablog.com

このときにも述べたことだが、2つ以上のモジュールに同一名のメソッド(プロシージャ)があると、メソッド名だけでは呼び出すことができない。

この習性を利用する。

f:id:akashi_keirin:20180423212225j:plain

このように、FoobarというモジュールとFoobar_というモジュールを用意する。

どうでもいいコードなので、画像だけ載せる。

まず、Foobarモジュールがコチラ。

f:id:akashi_keirin:20180423212237j:plain

Foobarモジュールのコードはコチラ

んで、Foobar_モジュールがコチラ。

f:id:akashi_keirin:20180423212245j:plain

プロパティとかメソッドの中身だけ全部コメントアウトしてある。

使ってみる

次のコードで実行してみる。

リスト1 標準モジュール
Public Sub testFoobar()
  hoge
  Foobar.hoge
  Foobar.fuga
End Sub

1行目は、単にhogeメソッドを呼んでいる。Foobarモジュールだけなら、フツーに実行できるはずだが、今回はFoobar_モジュールにもhogeメソッド(中身は空だけど)があるので、エラーになるはず。

2、3行目は、それぞれモジュール名を指定しているので、ちゃんと呼び出せるはず。

ちなみに、コード入力中は

f:id:akashi_keirin:20180423212300j:plain

このようにintellisenseが効く。便利。

実行すると、

f:id:akashi_keirin:20180423212306j:plain

予定どおりコンパイル・エラーになる。

hogeコメントアウトしてから再度実行すると、

f:id:akashi_keirin:20180423212315j:plain

f:id:akashi_keirin:20180423212328j:plain

意図どおり呼び出すことができた。当たり前だけれど。

おわりに

めちゃくちゃしょうもない対処法だけれど、これでメソッド呼び出し時にモジュール名付きで呼び出すことを強制できるのではなかろうか。

メソッド呼び出しに制約をかけることで、モジュールを多少細かく切り分けてもメインのコードの可読性が上がったりしないかなあ。

@akashi_keirin on Twitter