C# と VB (VB.NET) を比較するようなスレッドが未だに良くあがります。その時の (手抜き) 説明のためのメモであります。気付く度に更新しちゃいますので、生温かく見守るかスルーしてください。
まずは、良し悪しは除いて、VB (VB.NET) ならではの概念または機能をあげておきます。
VB.NET ならではの概念または機能
- Option Explicit で、変数の宣言型の明示性を指定できる (要らないw)
- Option Strict で、型の厳密性を指定できる (でも、デフォルト値がw)
- Option Compare で、文字列を比較するときの既定の比較方法を指定できる (要らないw)
- My クラスの存在 (今度は CSharper が「クラスの海」で迷子になりそう)
- My クラスに関連して「Form の既定のインスタンス」の存在 (要らないw)
- 二重起動防止など、アプリケーション フレームワークの存在 (あってもいいかなと思う)
- アセンブリ全体の名前空間のインポート (明示的に最小限インポートしたいよね)
- クラスまでもがインポートできてしまえる (うわぁー)
- モジュールの存在 (静的クラスの代わりにしたいのに、モジュール名が省略できてしまうのは...)
- 遅延バインディングが容易 (C# でも同じようなことはできる)
- 省略可能な引数 System.Reflection.Missing.Value に対応している (使わないなぁ)
- ローカルの静的 (Static) 変数の存在 (ブロックのフラグに使われることが多いみたいだけど...)
- コンストラクタは New という名前
- デストラクタは Finalize という名前
- デフォルト プロパティ (既定のプロパティ) で名前の指定が容易 (C# では IndexerName 属性が必要)
- MyClass キーワードの存在 (Me と区別が付くのは親クラスでのメンバ呼び出し時)
- Overloads キーワードの存在 (要らないけど、明示化する分には良いと思う)
- Optional 引数によるオーバーロードもどき (インテリセンスの出方が少し違う)
- Erase ステートメントの存在 (Nothing を入れて参照を解放するのと同じ)
- End ステートメントの存在 (System.Environment.Exit メソッドと同じ)
- Stop ステートメントの存在 (デバッグ時のブレーク ポイントと同じ)
- With ステートメントの存在 (妙なとこで使われると最悪w)
- Call ステートメントの存在 (VB6 時代は使っていたけど、今は不要じゃない?)
- Try... Catch... Finally ステートメントの Catch ブロックに When が使える (再試行用に使う?)
- Exit xxx ステートメントによる脱出 (まあ、アリなのかな)
しかし、Exit Try なんて使う機会ありますか? (w
- End xxx に統一されたブロックの終端
- メソッドの戻り値などに「メソッド名 = 戻り値」という書式が使える (Return 使おうよ)
- 値の代入は式ではなく文である (i1 = i2 = i3 = 0 という書き方はできない)
- 大文字小文字の区別がない (区別すると可読性損ねるので、これは良いことかなぁ)
- 通常 1 行は 1 文になる (C# では、セミコロンが必要)
- 文が複数行に及ぶ際には、アンダーバーが必要 (C# では不要)
- REM ステートメントという名のコメントアウト (いらないことこの上なしw)
- GoSub で文字が青くなる (サポートされていないのに...)
- Select Case などで使える n1 To n2 の存在 (まあ、アリですね)
- 配列の宣言などで使える 0 To n2 の存在 (可読性だけの問題...)
- ReDim と ReDim Preserve の存在 (コピーしているだけw コレクションを使いましょう)
- As New で宣言 + 初期化のタイプ数が減らせる (完全修飾名が長い場合に楽かなと思う)
- Declare ステートメントの存在 (DllImport 属性を使いましょう)
- RaiseEvent ステートメントで、イベント起こしがラクラク (アリだと思う)
- WithEvents ステートメントの存在 (Visual Studio のコード エディタにある ComboBox にも対応)
- Handles 句のおかげで、イベント プロシージャの作成が容易でかつイベントであると明示できる
- IsNot 演算子の存在 (C# だったら、!= null でいけますが、何か?)
- キーワードが Pascal スタイルなのが、時と場合と人によっては読みやすい
- キーワードが多くて冗長なのが、時と場合と人によっては読みやすい
- キーワードが人間に近い (ただし、御幣を招くキーワードもある)
- 昔ながらの VB の関数がデフォルトで使える (C# でも参照に追加すれば使える)
- 互換性で残っている構文の存在 (Do While, Do Until, Loop, On Error... Resume...)
- Visual Studio だと、コンパイルする前に通知されるエラーが C# や J# などに比べて多い
- Visual Studio だと、プロシージャ単位にラインが入って見やすい
探せば他にも色々あるでしょう。この中で私が個人的に好きなところは、これくらいです。
C# に比べて、個人的に VB.NET の方が好きなところ
- Raise イベントで、イベント起こしがラクラク
- WithEvents ステートメントの存在 (Visual Studio のコード エディタにある ComboBox にも対応)
- Handles 句で、イベント プロシージャの作成が容易でイベントであると明示できる
イベント周りばかりになってしまいました... あえてひとつ選ぶとすれば、Handles 句が好きです。「イベント プロシージャが永続的に有効」というルールを持っていれば、見やすくてかつ修正が楽だと感じます。確かに VB ならではの機能は意外に多いのですが、代用するまでもない機能が多いと感じますね。
関連リンク