私はこの記事の前編で,オブジェクト指向関連のキーワードがプログラミング言語によって違うために.NET開発者同士のコミュニケーションが難しくなることがあると述べた。ここではっきりさせておきたいのは,まずVisual Basic(VB)開発者がオブジェクト指向プログラミングをする際に問題が生じるとして取り上げようとしたわけではないことだ。実際,彼らはVisual C#開発者と同じくらいアプリケーションの構築に熟達している。

 私はVBのキーワードが全部嫌いだと言っているわけではないこともはっきりさせておきたい。例えば,継承を意味するキーワードのinheritsは優れていると思う。何はともあれ,VBはVisual C#よりも記述が詳細(悪く言えば冗長)である。C#は継承を表すのにコロン「:」を用いるので,inheritsというキーワードはVBによく合っている。同様に,VBのMyBaseやmeというキーワードも,Visual C#のbaseやthisと比べてVBにうまくなじんでいる。こうした言語間の違いは,開発者間の意思伝達を妨げるものではない。

 私が問題にしたいのは,VBとVisual C#に違いがあることではない。“Vive la difference!”(違いに万歳)。言語の違いには理由があり,それはそれぞれの言語を用いる開発者がどのように問題に取り組むかに関係している。

 言語にはそれぞれ利点がある。Visual C#はVisual C++よりも簡単だ。だが,ほとんどの人々にとって,1ページ分のVisual C#のコードの内容を追うよりも,1ページ分のVBコードを追うほうがさらに簡単だ。Dim(Dimensionの略)は,変数で指定したサイズ(すなわちdimension)のメモリー・ブロックを割り当てるようにコンピュータに命令するものだという簡単な説明をすれば,ほとんどの人々はVBを理解する方向に向かう。

 VBのもう一つの利点は,RAD(Rapid Application Development)に関するいくつかの機能を,ほかの言語よりも手早く利用できることだ。例えば,配列の大きさを実行時に変更するには,ReDimステートメントを使うだけでよい。同様に,My名前空間を利用すれば,簡単にプロジェクトの設定にアクセスできる。

 対してVisual C#は,より厳しい型チェックとより構造化された言語規則によってプログラマを保護する環境を提供する。OSの背後に存在するような要素によくアクセスするプログラマにとって,こうした環境は最適である。VB開発者はこれらの要素を抽象化して扱うが,Visual C#開発者はそのまま扱おうとすることが多い。

 これら2つの言語はいずれも非常に有用であり,どちらを使うべきかという議論はほとんど意味がない。私が懸念しているのは,いくつかのキーワードが,背後にある重要な概念の理解を妨げることだ。私は,一夜にして言語のキーワードが変わるなどとは期待していない。今できることの一つは,ほかのプログラム言語のキーワードを理解するためのより良い鍵を開発者に提供することである。それがひいては,自分が使っている言語の能力をより深く理解することにもつながる。

 幸い,Microsoft Developer Network(MSDN)には,そのような鍵となる「ロゼッタ・ストーン」(同じ内容が3種類の文字で書かれており,ヒエログリフ解読の鍵となった石)がある。この.NETのロゼッタ・ストーンは,Microsoftがサポートするいくつかの言語についてすべてのキーワードを列挙し,対応関係を記している。このWebページの存在を知ったのだから,あとはその内容を暗記するだけでよい---もちろん冗談である。

 しかし,まじめな話,このページを見れば,すべての言語はそれぞれ特有の表現を持っていることが分かるだろう。それは素晴らしいことである。例えば,Visual C#で純粋仮想関数を宣言するにはどうすればよいかを知りたければ,仮想関数の実装にabstractキーワードを付加する必要があることが分かる。ちなみに,これはVBがVisual C#よりも記述が冗長であるという原則に対する例外の一つである。