じゃんぬねっと日誌

ネタと雑記と時々プログラミング

目次

Blog 利用状況

ニュース

Halo3 にハマり中。アービターかわいいよ。あーびたん。

スポンサードリンク

運営サイト

  • C# と VB.NET の入門サイト

Blog Item

フィードメーター - じゃんぬねっと日誌

書庫

C# より VB.NET の方が好きなところ

C# と VB (VB.NET) を比較するようなスレッドが未だに良くあがります。その時の (手抜き) 説明のためのメモであります。気付く度に更新しちゃいますので、生温かく見守るかスルーしてください。

まずは、良し悪しは除いて、VB (VB.NET) ならではの概念または機能をあげておきます。

VB.NET ならではの概念または機能

  1. Option Explicit で、変数の宣言型の明示性を指定できる (要らないw)
  2. Option Strict で、型の厳密性を指定できる (でも、デフォルト値がw)
  3. Option Compare で、文字列を比較するときの既定の比較方法を指定できる (要らないw)
  4. My クラスの存在 (今度は CSharper が「クラスの海」で迷子になりそう)
  5. My クラスに関連して「Form の既定のインスタンス」の存在 (要らないw)
  6. 二重起動防止など、アプリケーション フレームワークの存在 (あってもいいかなと思う)
  7. アセンブリ全体の名前空間のインポート (明示的に最小限インポートしたいよね)
  8. クラスまでもがインポートできてしまえる (うわぁー)
  9. モジュールの存在 (静的クラスの代わりにしたいのに、モジュール名が省略できてしまうのは...)
  10. 遅延バインディングが容易 (C# でも同じようなことはできる)
  11. 省略可能な引数 System.Reflection.Missing.Value に対応している (使わないなぁ)
  12. ローカルの静的 (Static) 変数の存在 (ブロックのフラグに使われることが多いみたいだけど...)
  13. コンストラクタは New という名前
  14. デストラクタは Finalize という名前
  15. デフォルト プロパティ (既定のプロパティ) で名前の指定が容易 (C# では IndexerName 属性が必要)
  16. MyClass キーワードの存在 (Me と区別が付くのは親クラスでのメンバ呼び出し時)
  17. Overloads キーワードの存在 (要らないけど、明示化する分には良いと思う)
  18. Optional 引数によるオーバーロードもどき (インテリセンスの出方が少し違う)
  19. Erase ステートメントの存在 (Nothing を入れて参照を解放するのと同じ)
  20. End ステートメントの存在 (System.Environment.Exit メソッドと同じ)
  21. Stop ステートメントの存在 (デバッグ時のブレーク ポイントと同じ)
  22. With ステートメントの存在 (妙なとこで使われると最悪w)
  23. Call ステートメントの存在 (VB6 時代は使っていたけど、今は不要じゃない?)
  24. Try... Catch... Finally ステートメントの Catch ブロックに When が使える (再試行用に使う?)
  25. Exit xxx ステートメントによる脱出 (まあ、アリなのかな)
    しかし、Exit Try なんて使う機会ありますか? (w
  26. End xxx に統一されたブロックの終端
  27. メソッドの戻り値などに「メソッド名 = 戻り値」という書式が使える (Return 使おうよ)
  28. 値の代入は式ではなく文である (i1 = i2 = i3 = 0 という書き方はできない)
  29. 大文字小文字の区別がない (区別すると可読性損ねるので、これは良いことかなぁ)
  30. 通常 1 行は 1 文になる (C# では、セミコロンが必要)
  31. 文が複数行に及ぶ際には、アンダーバーが必要 (C# では不要)
  32. REM ステートメントという名のコメントアウト (いらないことこの上なしw)
  33. GoSub で文字が青くなる (サポートされていないのに...)
  34. Select Case などで使える n1 To n2 の存在 (まあ、アリですね)
  35. 配列の宣言などで使える 0 To n2 の存在 (可読性だけの問題...)
  36. ReDim と ReDim Preserve の存在 (コピーしているだけw コレクションを使いましょう)
  37. As New で宣言 + 初期化のタイプ数が減らせる (完全修飾名が長い場合に楽かなと思う)
  38. Declare ステートメントの存在 (DllImport 属性を使いましょう)
  39. RaiseEvent ステートメントで、イベント起こしがラクラク (アリだと思う)
  40. WithEvents ステートメントの存在 (Visual Studio のコード エディタにある ComboBox にも対応)
  41. Handles 句のおかげで、イベント プロシージャの作成が容易でかつイベントであると明示できる
  42. IsNot 演算子の存在 (C# だったら、!= null でいけますが、何か?)
  43. キーワードが Pascal スタイルなのが、時と場合と人によっては読みやすい
  44. キーワードが多くて冗長なのが、時と場合と人によっては読みやすい
  45. キーワードが人間に近い (ただし、御幣を招くキーワードもある)
  46. 昔ながらの VB の関数がデフォルトで使える (C# でも参照に追加すれば使える)
  47. 互換性で残っている構文の存在 (Do While, Do Until, Loop, On Error... Resume...)
  48. Visual Studio だと、コンパイルする前に通知されるエラーが C# や J# などに比べて多い
  49. Visual Studio だと、プロシージャ単位にラインが入って見やすい

探せば他にも色々あるでしょう。この中で私が個人的に好きなところは、これくらいです。

C# に比べて、個人的に VB.NET の方が好きなところ

  1. Raise イベントで、イベント起こしがラクラク
  2. WithEvents ステートメントの存在 (Visual Studio のコード エディタにある ComboBox にも対応)
  3. Handles 句で、イベント プロシージャの作成が容易でイベントであると明示できる

イベント周りばかりになってしまいました... あえてひとつ選ぶとすれば、Handles 句が好きです。「イベント プロシージャが永続的に有効」というルールを持っていれば、見やすくてかつ修正が楽だと感じます。確かに VB ならではの機能は意外に多いのですが、代用するまでもない機能が多いと感じますね。

関連リンク

投稿日時 : 2007年2月26日 14:38

コメントを追加

# re: C# より VB.NET の方が好きなところ 2007/02/26 14:48 じゃんぬねっと

ああ、いけない。
"良し悪しは除いて" と書いておきながら、括弧の中に本音が...

# re: C# より VB.NET の方が好きなところ 2007/02/26 20:27 渋木宏明(ひどり)

>VB.NET ならではの概念と機能

半分近く「いらない」に○しそうw

# re: C# より VB.NET の方が好きなところ 2007/02/26 21:52 じゃんぬねっと

>ひどりさん
私も半分以上 ○ です。
しかし、柔軟にオプションで指定できる分には許容したいですね。
次期 VB では My あたりの機能もオプションで制限できるようになるみたいですし。

# re: C# より VB.NET の方が好きなところ 2007/02/26 23:57 有末 清華

僕はC#のが好きですね。単純に慣れてしまっただけですが(苦笑。

VBの構文がすっごく見にくいです、VB6.0からプログラム始めた人間なのに(笑。

あとVBで大文字小文字区別しないのが使いにくいってのも原因ですかね。

# re: C# より VB.NET の方が好きなところ 2007/02/27 10:39 なおこ(・∀・)

  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  Option Compare まだー?
             \_/⊂ ⊂_)_ \_______
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/

# いらないと思うけどw

# VB.NET より C# の方が好きなところ 2007/02/27 10:52 じゃんぬねっと日誌

VB.NET より C# の方が好きなところ

# re: C# より VB.NET の方が好きなところ 2007/02/27 10:54 じゃんぬねっと

>なおこ(・∀・) さん
知っていたけど、思いっきり忘れていたわぁ...
っていうか、使ったことがねぇ... orz

# re: C# より VB.NET の方が好きなところ 2007/02/27 14:54 なおこ(・∀・)

http://msdn2.microsoft.com/ja-jp/library/0wt87xba(VS.80).aspx

End と Stop も~
これも激しく不要w

# re: C# より VB.NET の方が好きなところ 2007/02/27 15:05 じゃんぬねっと

>なおこ(・∀・) さん
代用できる否問わず、細かいところまで掘り下げてみると多いですねー。
これでも、かなり挙げたつもりだったのですが... orz

ついでに、Erase ステートメントも追加しておきました。
それにしても、本当に要らないものが多い。

# C# や VB.NET より J# の方が好きなところ 2007/02/28 10:19 じゃんぬねっと日誌

C# や VB.NET より J# の方が好きなところ

# re: C# より VB.NET の方が好きなところ 2007/03/01 13:49 ななし

VB:変数のオーバーフロー時に例外を発生させるのがデフォルト。(sbyteで値が127の値に+1すると例外)
C#:変数のオーバーフロー時に値がループするのがデフォルト。(sbyteで値が127の値に+1すると-128)


コンピュータの動作としてはC#の方が正しいとは思うが、
バグの混入を減らすという意味ではVB.NETのほうが正しいと私は思います。

タイトル  
名前  
URL
コメント