自称 VB プログラマ (?) さんから、こんなことを耳にすることがあります。('VB プログラマ' って何でしょ? プログラマだったら言語 == 道具に依存して欲しくないわけですが...)
- VB6 は簡単だったんだけど、VB.NET は難しくてわからない。
- VB6 ならできるんだけどなぁ。
- VB.NET? あんなの VB じゃない!!
カンニングの竹山さんじゃないですけど、今から苦言を言います!! (ごめんなさい)
このような方々は、VB6 も「まともにできるレベルではない」と考えています。'まともにできる' とは、言語仕様を理解しある程度 '使いこなせている' という意味です。彼らの 'できる' は、とりあえず、仕様どおりの動きを作ることが 'できる' ということだと思います。確かに実装は 'できている' のでしょうけど、言語として 'できるレベル' なのかというと疑問です。
実際、レビューしてみると '動いているだけ' というソースが多く、理解できていない場合が多いです。確かにそういうことができる言語と言えばそれまでなのかもしれませんが、個人的には言語は道具であり、プログラマに問題があるとしか思えないのです。理解せず「それなりに動いたから OK」というのは、プロのやる仕事ではありませんよね。これは業界問わずです。機械設計 (CAD などを使う人) で言えば 'トレース' しかできない人が、'設計' をしているつもりになっているのと変わらないわけですから。機械や電気回路設計でも、このような勘違いをしている方は多いものです。
さて、VB6 にはモジュールという概念がありますが、正しく利用されていない場合が多いように思います。モジュールについては、「標準モジュール」と「アクセス修飾子」を使って表現できます。さて、明確に機能を集約して「カプセル化」できているでしょうか? 見たくない「ビジネス ロジック」をただ退避させているだけになっていませんか? (これ、本当によくある) frmHoge.lblHoge.Caption... などというカプセル化を無視したステートメントは存在しませんか?『え? カプセル化ってオブジェクト指向の概念じゃないの?』なんて思っている方は構造化言語のお勉強をしなくてはいけないです。
また他の言語に比べてやや貧弱ではありますが「クラス モジュール」を使って「クラス」を表現できます。まず「インスタンス」とは何か理解できていますか? 特に「マルチプル インスタンス」という考えがないと有効活用できません。メソッドが定義されたクラス自身が、データを知っていることの利点がわかりますか? これがわかれば、Form や TextBox も「クラスである」という考え方ができ、メソッドやプロパティがどのように実装されているのかわかります。以前、講習会で『とりあえず、As New しとけば使えるもの == 手間が増えて面倒なだけ』としか思っていない人が思った以上に多くビックリしました。
これら (カプセル化、インスタンス) がわかっていれば、それほど難しくないでしょう。実際すんなり移行できた人たちは、これらを理解し使いこなしていることが多いです。逆に移行できない人たちは、インスタンスというのがわかっていない人であることが多いです。
例として、カプセル化やインスタンスなどの概念をあげました。これらは新しく加わった概念ではなく、今まで使いこなしていなかっただけというほんの一例に過ぎません。VB.NET になって新たに覚えることは、新しいキーワード、継承、NCL (.NET Framework Class Library) の名前空間をフィーリングで覚える。この程度なのです。
とにもかくにも、結論として、
- 新しく加わった「継承階層」などの概念で、躓いているわけではない。
- 「VB6 ならできる」「VB.NET なんて」というわりに、実際には VB6 時代からあったはずの概念のところで躓いている。
ということなので、VB6 自体も '本当はできていない' と言えるのではないでしょうか? 厳しい意見ですが、これが現実だと思います。逆に VB.NET のおかげで VB6 のクラス モジュールが好きになった方もいます。これは VB.NET を通じて VB6 で学ぶべきものを学習したからです。本人もそのように自覚しています。
反応が良ければ (釣れれば)、次回に続くカモ (w