トップページ > Tatsuの開発室 > ここがヘンだよVisual Basic(.net)
ここがヘンだよVisual Basic(.net)
このページは仕事でVisual Basic.net 2003(7.1)を使っていた当時に、あまりの使いにくさにぶち切れてやけくそで書いたページです。
2005とか2008とかについては多少は追記しましたが、.netになってからのVisual Basicに関してはいまだにくたばれと思っているので真剣にやる気はありませんのであしからず。
2005/12/07 2005について若干追記。
2009/08/23 2008について若干追記。
言語
VB6互換関数
コーディングスタイルの統一がしにくくなるではないか。
コーディング規約を考えるに当たって選択肢が増えるので厄介である。
.NET Frameworkの各型のメソッド使ったほうが書く段階で何が通るか分かるので安全な気がする。
.NETのクラスと混用されてハマりの元になっているのを見るといっそないほうが良かったのではないかという気さえしてくる。
それに、こういう旧VB使いへの配慮なんだかおせっかいなんだかよく分からないものがわざわざあるのを見ると、「おい、おまえら、.NETは難しいだろうから簡単そうなものでも使っとけ」と馬鹿にされているというのか、甘やかされているというのか、とにかくやってて、頭を使って生み出しているという誇りを感じられないのが嫌になってくる。
というわけで、個人のよそに出す「作品」には向いてないと思う。
Do...LoopステートメントとWhile...End Whileステートメント
いっぱいあって何がなんだか訳分からん。
Until句は蛇足だと思う。
未初期化のローカル変数は勝手に0やNothingで初期化される。
実際に使っている現場ではなまじコンパイルが通るせいで動かすと初期化忘れで例外が出るバグが多い。まさに余計なお世話。
更に、後年になって警告が出るようになったが、Javaのコンパイラのようにプログラムの流れによって未初期化になるケースの検出が甘い。
いっそコンパイルを通さないようにしてくれ。
Is式
=と<>でも型が違えばエラーになるので参照の比較だけ特別な式にする必要性がわからない。参照代入用のSetステートメントがなくなったのでなおさらだ。
配列作成用New式
配列でないInteger相手でもNew式書けるせいでなんか分かりづらい。C++のテンプレートだったら記法の統一ということで意味が分かるのだが。突然{}出されても違和感バリバリ。
ループから抜ける文はあるが、ループの最初に戻る文はない
ちょっと戸惑うな?
Withステートメント
オブジェクトの参照を高速化するために使うことが推奨されているけど、ここだけコンパイラの都合を押し付けられる格好になるのはVB.NETらしくないと思う。
省略記法としてうまく使えれば便利なのだが。
節操のなさ
昔のBasicからの拡張の過程を見るとそのときの流行を節操なく取り込んだという感が強い気がする。Do...LoopステートメントとWhile...End WhileステートメントとかTryステートメントとOn Errorステートメントとか、節操がないとしか言いようがない。
マスターしてもVB6→.netのようにMicrosoft的な都合で勝手に変えられると思うとやってて空しくなってくる。
それに、C#のパクリのような言語要素を使っているとやってて情けなくなってくるというか、負け犬のような気持ちになってくる。
統合環境
手抜き
バッチビルドが使えない
試験用のデバッグ版とリリース版がいっぺんに作れないので区切りとなるビルドのときにいちいち切り替えるのは面倒だ。
Visual C#やC++でできていることをわざわざできなくする意図が分からない。
Visual Studio 2013になってもいまだに使えないというのはやっぱり謎である。
1つのファイルを2つ以上のタブで開けない
移動するのが面倒なくらい離れているところを相互に参照してコーディングを行う時に不便である。
Visual C#やC++でできていることをわざわざできなくする意図が分からない。
これはさすがにVisual Studio 2013ではできるようになっていた。
コード定義ウインドウも使えない
人のプログラムを読んだり、変数・メソッドの定義を知るのに便利なコード定義ウインドウもC#では使えるのにVB.NETでは使えない。
Visual C#やC++ではできているうえ、Visual Studio 2013になってもいまだに使えないというのはやる気を疑う。
アホ
インデントの意味を成さないオートインデント
人がインデントした左にオートインデントしてどうする。読みにくくなるではないか。というか何のためのインデントか分かってるのか。
コントロールを継承したコントロールを使うと突然消されることがある
統合環境のバグ。人が苦労して置いたの勝手に消すなや、ボケ。すぐに統合環境終了させればよいけど誤って保存したらどうする。
Visual C#ではこのバグは存在しない。わざわざバグを作りこんでどうする。
画面分割をするとコードブロックが勝手に畳まれる
開きなおすのがかったるい。
Visual C#やC++ではやってないことをわざわざやって使いづらくする意図が分からない。
.vbproj.user
プロジェクトのユーザー設定用ファイルにはプロジェクトのフルパスが入る。
このせいでDLLを参照したプロジェクトをコピーして使ってもコピー元で参照していたDLLが参照され続けることになり、バージョン管理のときに戸惑う。
Visual C#やC++ではやってないことをわざわざやって使いづらくする意図が分からない。
プロジェクトを作ったばかりの時は実行ファイルの出力先ディレクトリがデバッグ版とリリース版で分かれていない。
構成を変えたときにコンパイルしなおしになるのは、時間が惜しい。
手で変えればよいけど、最初から作ってあったほうが面倒がなくて良いと思う。
Visual C#やC++と初期設定を変える意図がよく分からない。
Visual Studio 2008時点の状況(2009/08/23 追記)
Visual Studio 2008 StandardのVB 2008でもバッチビルドがない点と、1つのファイルを2つ以上のタブで開けない点は一緒だった。
何年たっても理由がわからん。多分やる気がないんだろう。
その他
Visual Basicという名前そのもの
行番号付の頃のBASICとはどう考えても別物なので名前を付け直せ。昔の思い出を冒涜されているようで胸くそ悪い。
代わりがない
CとかJavaとかだと処理系や統合環境に選択肢があるし、C#ですら、Sharp Developのようなものが存在するけど、Visual Basic.netには代わりがない。
嫌でもどこか間抜けなVisual Basic.netの統合環境を使わざるを得ないのは苦しいところである。
使い道が分からない
VB6とかVBAと比べると明らかに手軽ではないし、かといって大きいものを組むには混乱を招く仕様が多いため逆に生産性が下がっている。
結局、どこに使うとおいしいのかよく分からない。
Road to 2005
デフォルトインスタンス
どこで定義されたかわかりにくく、勝手にインスタンスが生成されたりしてわかり辛い。VB6由来なのだが、便利と思っているつもりだろうがこんなもんは正直言っていらない。せっかくなくなったのに。予期せぬインスタンスの生成はバグの元である。くたばりやがれ。
こういうものは、フレームワークにするなりクラスにするなり、言語外でできないのだろうか。そうすれば、勝手な振る舞いもなくユーザーの使いやすいようにできる可能性が生まれるのだが。
デバッグコンティニュー
デバッグのときしか使えないし、とりあえず動けばよいということで動かした後、整合性がなくなったりどこを直したのか解りにくくなりそうである。いらない。
リファクタリング支援
人がソースを直すよりメソッド名の付け替えやプロパティの生成(面倒!)などがやりやすい上に、正確である。せっかく決まった作業を正確にこなすコンピュータなのだから、これは欲しい。デバッグコンティニューなんかより、こっちのほうが欲しい。
Myクラス(2004/09/11)
最近、記事でやけに見る。
よく使う(と製作側は思っているんだろうけど実際はどうだか)要素にアクセスするためのクラス。
まったく異なる要素がまとめられるため、ぱっと見で何をしているかが字面から読めず、可読性を損なう。
Tipsの記事がMyクラスを使ったものと他言語でも使えるクラスを使ったものに分散されるため、使い回しが効かない。調べる労力の無駄である。
中途半端に使われるとソース中の統一性が損なわれてソースを読むのに時間がかかるせいで、チームで開発しているときにソース解析の工数や障害対応の工数、開発規約で検討する項目とその議論にかかる時間が増える可能性がある。これ以上無駄な労力を使わせるな。
正直、これもいらない。
何をいまさら
未初期化のローカル変数の使用に対する警告やcontinue文なんて新機能として大々的に謳うものじゃないだろう。
諸悪の根源、語る。
Visual Studio 2008時点の状況(2009/08/23 追記)
Visual Studio 2008 Standardではリファクタリング支援ってないんだね。
これはグレードのせいかもしれないけどMSDN見てるとそうでもなさそうで、残念なことこの上ない。
BASICって何だっけ?
Microsoft Small Basic なんてものがある(日本語の最後がないのが残念だ)。
.net framework上で動くBasic言語なのだが、こういうものが存在するくらいなので、もはや初心者向けとは言えなくなっている。仕事で使うには今まで述べてきたように問題だらけだし、いったい誰向けの言語なんだろう?
結論
簡単に使えるようにするつもりが無駄な多様性による混乱を招いているケースが多い。そのため、しなくても良い苦労をさせられることが多く、生産性を下げていると思う。
また、簡単に使えるようにするつもりの言語仕様による甘やかしのためやっていて面白くもなんともない上、無用な多様性への対処と代替の効かない統合環境のせいで他の環境ではしなくても良いこともある無駄な労力を使わされ非人間的である。
異常進化の袋小路。さっさと絶滅して欲しいものである。
お仲間?
なぜVBはC#と比べて駄目なのか (負け犬プログラマーの歩み)
おまけ
VB.NET用キーワードファイル詰め合わせ
仕事等でVB.netを使わざるを得ない 人向け。とりあえず間抜けな統合環境とテキストエディタを併用するために個人的に作った設定ファイルを集めてみる。
秀丸の強調表示ファイルとK2EditorのキーワードファイルとGreenpadのキーワードファイルの詰め合わせ。
場外乱闘
2005/11/16
ここのところ、キャンペーンなのか、VB.netのFlashを見かける。うざい。
糞仕様で人の時間を奪うだけでは飽き足らず、Flashの転送時間まで使って人の時間を奪いやがって。