web-dev-qa-db-ja.com

VBがとても人気があるのはなぜですか?

私には、Visual Basicは不格好で、醜く、エラーが発生しやすく、読みにくいようです。他の人に任せましょう 説明理由 。 VB.netは明らかに機能の面で言語の大きな飛躍を遂げていますが、なぜC =のようにVBでコーディングすることを選ぶのかを私はまだ理解していません。

ただし、「MSショップ」の商用Webアプリの大部分はVBで構築されているようです(そのようです)。私はこれで修正することができましたが、VBは、それが値するよりももっと人気があるようです。

誰でもこれらの質問のいずれか(またはすべて)への回答を手助けできますか?

  • VBで何か不足していますか? C#より学びやすい、または「友好的」ですか?知らない機能はありますか?
  • VB/VB.netが今日、特にWebプロジェクトでそれほど頻繁に使用されるのはなぜですか?
28
aaaidan

VBを使用して、IPアドレスを追跡するためにGUIの発音を変更できます。これは 犯罪解決 でよく使用されます。

47
Rick J

出身地によると思います。プログラマーとして始めたとき、たとえばC#よりも読むのにVBは簡単かもしれません)と思います。常連客に取り入れたい。

私はVBプログラマーであり、.NETが登場したときも、最初の2年間はまだVB.NETで働いていました(C#のポイントは実際にはわかりませんでした)。今は数年後のC#の背後で、VB.NETコードがC#コードよりも「デコード」に少し時間がかかることが時々あります。おそらく、一部の構造ではシンボルよりも単語に依存しているためです...

42
Fredrik Mörk

以下は 別のスレッドへの回答 をコピーしたところです。

私はVBとC#の両方を定期的に開発していますが、私の稼ぎのほとんどはC#に関係しています。個人的には、ほとんどの場合VB all…lambdas!)機能します。Jonによって概説されているものを除いて、ハードアドバンテージを実際に挙げることはできません。実際、Herfriedは web site (ドイツ語で!)テクニカル。

すべてのC関連言語について本当に私を悩ませているのは、愚かな構文です。これは純粋に文化的なものですが、C++で専門的な仕事の大部分を行う人物であり、かなり熟練しているため、私はまだ構文が絶対に嫌いです。そして、C++だけのかわいい癖ではありません。いいえ、パッケージ全体です。なぜブレース?なぜセミコロン(おそらく、すべてのプログラミング履歴の中で最も愚かな決定)なのでしょうか。なぜ愚かなCスタイルのキャスト構文ですか?変数宣言のキーワードがないのはなぜですか(実際にはthisが最も愚かな決定です)?

本当に私を悲しく、怒らせるものはたくさんあります。 VBは聖人ではありません、その言語には大きな欠点があります。しかし、私が上記で述べたことと比較して何もありません。

私はこれらの発言のほとんどが正当化を必要とすることを理解していますが、これは私たちがそれらに慣れ親しんでいるからというだけの理由で提唱しています。さらに、ここは適切な場所ではありません。 C#の構文はVBに対する主な利点ですが、主な欠点でもあると言えば十分です。

VB My名前空間のため、私は好きではありません。XMLリテラルのため、私は好きではありません。弱い型付けのため、私は好きではありません。オプションのパラメーターのため、またはswitchステートメントの方がはるかに優れているため、それを好みませんいいえ、構文のため、それを好みます


そうは言っても、VBは構文によってますます邪魔になることを認めざるを得ません。最新の誇大宣伝はラムダ関数でパラメーター化されたLinqクエリのようであり、これが多くのことを容易に認めます残念ながら、ラムダに対するVBの構文は扱いにくいので、C#と競合することはできません。Parallel.Forへの呼び出しがVBのように膨らんでいることを考慮してください。当然です。私見、VB設計チームはここでは間違った方向に進んでおり、可読性よりも保守的な一貫性を支持しています。


主観的な非難に答えるには:

私には、Visual Basicは不格好で、醜く、エラーが発生しやすく、読みにくいようです。

あなたは確かにそう考える権利がありますが、マルクが以下に言ったように、これを客観的に議論するのは難しいでしょう。私は間違いなく多数のC構文要素を引用できます客観的に詳細VBに存在するものよりもエラーが発生しやすい。実際、VB構文は、そのような状況を明示的に防ぐために開発されました。

「不器用で醜い…そして読みづらい」は、慣れていないほとんどすべての言語にタグ付けできる修飾子です。簡単に言えば、醜さは言語への不慣れの直接的な結果です。

言語をよく理解することは、コード内のパターンを認識することを意味します。上手に書かれたコードは、実際の美徳によってエレガントに見えます一方で、悪い(遅い、エラーが発生しやすい)コードは醜く見えます。それはそれと同じくらい簡単です。


最後に、あなたが引用した記事には、いくつかの不正確な情報や古い情報が含まれています。非常に主観的で感情的な議論の唯一の正当化として、それらはあまりよく適していません。

27
Konrad Rudolph

私には、Visual Basicは不格好で、醜く、エラーが発生しやすく、読みにくいようです。

私にとって、英語は不器用で、醜く、エラーが発生しやすく、特に文法が不十分で、スペルが不適切で、大文字と句読点が無謀に無視されており、思考を空間的および精神的に整理する方法がわからない人々によって書かれているように見えます。

言語の構文が原因でVisual Basicが読みづらい、または不器用であるだけでなく、プログラマーが自分の考えを表現するのがあまり得意ではないために、通常はそうなります。

If blah = 10 Then If stuff = "foo" Then t = 1 + k: s = 42: dostuff21

そう、それは恐ろしいことです。しかし、他の言語で恐ろしいコードを書くこともそれほど難しくありません。正しく記述されていれば、コードがVBで記述されていても、それは非常に理にかなっています。

If SelectedType = 10 And UserName = "Foo" Then
    CurrentUsers = CurrentUsers + 1
    UserConnectionID = 42
    PerformUserOperation
End If

少なくともそれはもっと読みやすく、理解しやすいです。それはまだベーシックです。読みやすい方法でコードをフォーマットし、適切な名前の識別子を使用し、理解しやすいコードを書くことに注意を払うことで、プログラマーの意図を明確に表現できるかどうかは、プログラマーの能力にかかっています。

とは言っても、VB3日以来、Visual Basicにはあまり触れていません(したがって、 "古い"構文の例です)。 。確かに、いくつかの欠陥があるかもしれませんが、それらの問題を回避するために考案されたアプローチは、あるプログラマーのスキルを他のプログラマーよりも示しています。

(無差別にスプレーOn Error Resume Nextは、VB .NET以前の時代に戻る)での例外の欠如の欠点を回避するためのあまり良くない方法として思い浮かびます。

15
coobird

VBに対するあなたの主張のほとんどは、VB-Classic(2番目のリンク)にのみ適用されるか、かすかなまたは時代遅れの引数に基づいています

  • VBCでも、GoSub ... Returnなどは使用しません。
  • staticの何が問題になっていますか? C++もこれをサポートしています。
  • VB10は暗黙的な行継続を導入します(C#のような冗長なセミコロンは不要です)
  • C++とC#にもさまざまなキャスト関数が存在します。 C#の(object)(expr)- Cast-Syntaxとobject as typeは、さらに混乱して矛盾しています。
  • withの何が悪いのですか?ネストされたツリー構造は、C#では不可能な非常に直感的な方法で作成できます。
  • VBでのイベント処理は、C#よりもはるかにエレガントです。デリゲート、eventhandler-procsなどを初期化しなくても、単一のキーワード(WithEvents)でイベントを導入して処理できます。 。これにより、VBでのGUIプログラミングがはるかに快適になり、designerでイベントコードを生成する必要がなくなります。
  • オプションのパラメーターが新しいC#に導入されました-したがって、それらは良いようです。
  • VB.NETにはbothの厳密なショートカットブール演算子があります。
  • スクリプト言語のようにVBを実行しない限り、コンパイル時に構文エラーをチェックします
  • End Ifは、単なる}よりも役立ちます。複雑な構文構造がある場合、すべての中括弧は混乱を招くだけですが、具体的なEnd ...は、閉じられていないブロックを特定するのに役立ちます。
  • XML Literals -XMLスクリプトはコードの一部になり、intellisenseで完全にサポートされます。

全体として、構文を除いて、VB.NETとC#の間にはわずかな客観的な違いがあります。 EG:VBより良いイベントシステムとより良いIDEにより、GUI設計はより効率的ですが、たとえばアルゴリズムはC#でよりよく表現できるため、構文は簡潔です。

残りはあなたの個人的なスタイルの問題です。 C-スタイルのプログラマーはC#に慣れています、VB(または多分Pascal?)-スタイルのプログラマーはVBを使用します。

しかし、Wordベースのより明示的なVB構文は、Cのすべての記号よりも初心者にとって読みやすいかもしれません。比較:

If (a < 15) Xor (b = 2) And Not Condition Then

if ((a < 15) ^ (b == 2) && !Condition())

これは、ある言語が別の言語より優れているという意味ではありません。

編集:-----------------------------------------

引数に対してVBはエラーが発生しやすくなります。Option Strict Onを使用すると、C#と同じくらい厳密になりますが、そのような間違いをすることはできません。

// VB would initialize with zero (C/C++ doesn't)
int countZeros;
// No confusion with loop bounds with For x = 1 To Length
for (int i = 1; i <= length; i++) {
    // Never confusing == with = 
    if (data[i] = 0) 
        countZeros++;
}
13
Dario

歴史的に、VB開発環境は、特定のタイプのアプリケーション(たとえば、GUIアプリ)を構築するための迅速かつ効果的な方法でした。そのため、非常に人気のある選択肢になりました。VBは全盛期に最も使用された言語でした(例:VB6)。

この種のインストールベースがあっても、まだ多くの作業が行われていることは驚くに値しません。

12
dommer

すべてC#が存在する前に開始されました

1999年に戻って、私たちはVisual Studio 5/6を持っていました。独立系ソフトウェアベンダーまたはWindowsを使用している企業で、アプリケーションを作成する必要がある場合。従業員がプロジェクトに費やした時間を追跡するには、いくつかのオプションがありました。

  1. Visual Basicのフォーム。
  2. Visual C++のMFC、ATL、またはWin32。
  3. Access 97/2000のフォーム。
  4. ASP Webサイト。
  5. Javaアプレット。

当時、私たちはDot-Comバブルが崩壊する寸前だったので、(4)または(5)が得意な人は、魅力的なドットコムでストックオプションの交渉に出かけました。

(3)ロックと全体的なスケーラビリティに問題がありましたが、必要に応じてサポート機能を実行するためにシェルアウトするAccess駆動のソリューションがたくさんありました。

したがって、VBおよびVC++が残ります。

VBのフォームエディタは、当時、生産性に優れていました。ボタン、ラベル、テキストボックスだけでなく、再利用可能な完全なOLEコントロールツールボックスであるコンポーネントをドラッグアンドドロップできました。賢いグリッド、Excelシート、またはIEインスタンスなどのコンポーネントです。ワイヤーアップはバックグラウンドで行われました。すべてがオブジェクトのようで、ダブルクリックしてイベントハンドラーを追加しました。これは非常にVisual C++でははるかに困難でした。当時のVisual Studio開発者サポートチームのメンバーとして、Visual Basicのサポートコールでは、どのコンポーネントを使用するのが最適であるか、または特定の方法でアプリケーションを最適化する方法についてほとんど覚えていました。 「X、Y、Zのユーザーインターフェイス機能を備えたアプリケーションを作成する方法」は決してありません。

Visual C++でリッチなUIを構築することは、別の課題でした。ダイアログとSDI/MDIフォームのビジュアルエディターサポートはありましたが、かなり制限されていました。 MFCまたはWin32への埋め込みOLE Controls(ActiveX))のサポートは、ブラックアートでしたが、ATLでは少し簡単でした。サイズ変更イベントやオーナー描画などの単純なものを配線するのは非常に面倒でした。コンポーネントのカスタムイベントに必要な接続ポイントだけです。

はい、VC++は実行速度、デバッグ機能、柔軟なフレームワーク/ライブラリ/ UIオプションを備えていましたが、IDEサポートではそのすべてをカバーできなかったため、ウィザードなどの最も一般的な操作に対処しました、包括的なMFCクラス階層と90日/ 2の無料インシデントサポートライン。

VBに同梱されているアプリケーションパッケージャであるIIRCは、アプリ、VBランタイムおよび最新の共通コントロールDLLをパッケージ化し、スタンドアロンのEXEインストーラを提供することができます。 MFCの開発者を悩ませた「どのmsvcrtXX.dllとmfcxx.dllをインストールしましたか?」はどれもありません。

したがって、市場投入までの時間と豊富なユーザーインターフェイスの理由から、VBは非常に大きな支持を得ました。

Visual J ++とVisual InterdevがVS6でヒットしたとき、Visual Basic IDEがVisual C++との戦いに勝利したことは明らかでしたが、これは公平な見方でした。 Studio .NETには、新しい[〜#〜] cool [〜#〜]C#言語用のVBのようなフォームエディターがありました。

VBこれまでずっと人々が楽しんでいたUIデザイナーと結びついた新しいJava/C/C++に似た言語は、MFC/ATL/Win32。VB 3/4/5/6で、VB.netに100%の下位互換性がないことを好まなかった人にとって、これは新しい言語を学習する機会を提供しましたおなじみの環境。


VB=のような包括的な製品がMicrosoftの起源と関係がある可能性が高い理由であり、Basicが主力の開発者製品ですが、私はそうではありませんこの時点で引用はありません。

7
JBRWilkinson

ただし、醜い場合は通常、その言語に固執する理由になります。巨大なコードベースをスクラップするのは非常にコストがかかります。また、開発者がすでにその言語を知っているため、他の言語よりも使用するコストが低くなります。

6
Brian Rasmussen

私の意見では、VB.NETは学習が容易であり、その通りであり、C#よりも全体的に簡単です。 VBが非常に人気があるのは、これが最初のポイントです。もう1つ、最大のポイントは、この言語のVB 6以前のバージョンを使用した開発者には大きなコミュニティがあり、VB.netを使用してアプリケーションを開発する方が簡単だということです。新しい言語を学ぶために。

6
iburlakov

他の人が言ったように、言語構文に対する審美的な判断は、以前に知っていたことに大きく依存します。 10年以上の間、Cに似たコンテストであるように見えます。 "blocks"には中括弧、間接参照(Perl、php)には "->"、関数呼び出し引数には括弧、//コメント、および行末のセミコロン。一部の人々は、この「ペンセユニーク」のおかげで、言語を知っていれば、それらすべてを知っているとさえ思っていました。しかし、これはC++/Javaの人々の間で、唯一の正しい構文の美学であり、他のものはCOBOLのクローンを作成しようとしているという考えを浸透させました。

数年前、私はRubyに切り替え、現在はpythonに切り替えました。醜いセミコロン、中括弧、およびその他の意味のない文字のガラクタにこれ以上我慢できません。ソースコードは人間が読むことを意図しています。ビジュアルスタジオを試してみたところ、C#よりもVBを選択しました。一部のプログラマーは、Javaのような構文で「真剣に見える」ためだけにC#を選択したのではないかと思いますが、同じ機能があります...目を休ませてください。

6
vincent

さて、あなたが.NETについて話しているなら、私が考えることができる本当に簡単なものがあります:

Visual StudioのVB.NETのエディターは、C#のエディターよりも構文エラーのキャッチに優れています。

VS2008 SP1ではC#のエディターが大幅に改善されましたが、プログラムをコンパイルしようとするまでエディターが認識しない構文エラーがいくつかあります。

4
Powerlord

VB人気の大部分は、VBのツールが他の利用可能な言語よりもはるかに使いやすい時代に始まりました。「クラシック」VBは、Windowsを構築する簡単な方法を提供しましたWin32 APIの内臓を学んだり、手動のメモリ管理に煩わされたりする必要のないアプリケーション。VB C++よりも、プログラマーの初心者の参入障壁が低くなったため、多くの人が歯を切りましたVBで。

最近では、VB C#よりも優れている点の1つは、長年VBを使用してきた人にとって馴染みがあることです。別の利点は、VB句読記号の代わりにキーワードを使用する傾向があるため、コードは読みやすいです。VB、Java、C、C#、およびPythonで作業する人として、VB =は、何年も前に書いたコードをレビューするときにジャンプするのが最も簡単な言語です。構文はより冗長であるため、多くの場合コードが読みやすくなり、Visual Studioは常に優れた書式設定を行っていますVBコードは、入力時にフォーマットをクリーンアップして、コードが一貫してフォーマットされるようにします(作者のだらしさに関係なく)。

付記として、私はPythonが非常に読みやすく、同様の理由で確認するのが簡単だと思います。Pythonでは、コードのフォーマットはIDEではなくインタープリターによって強制されますが、最終結果Pythonは、句読点よりもキーワードを優先しますが、VBよりも間違いなくそうです。

4
gbc

いくつか例を挙げると:

  • 使いやすさ
  • なじみのある名前(basicは最初の人気のあるコンピュータプログラミング言語の1つでした)
  • マイクロソフトのマーケティングを過小評価しないでください
3
Toon Krijthe

それが他のどの言語よりも多かれ少なかれ「エラーが発生しやすい」と主張するのは難しいでしょう。私はまた、「商用MS Webの大部分」についても疑っています。私が見たところから見ると、C#は.NET開発をリードしています(.NETは、デバイスドライバー以外のMSスタックのフラグシップツールです)。

3
Marc Gravell

VBは非常に冗長で、大文字と小文字を区別するC#に比べて使い慣れています。初心者プログラマにとって、それは最良の出発点です。

3
chugh97

VB.NETがC#(C#4でなくなる)よりも優れている点の1つは、デフォルトの名前付きパラメーターであり、VSTOを使用するときに非常に便利です。

3

VB/VB.NETはRAD(Rapid Application Development))カテゴリに属しています。ツールボックスからドラッグアンドドロップするだけで、少ないコードでアプリケーションを開発できます。

3
NinethSense

まあ、私はあなたが古典的なVBとVB.NETを区別する必要があると思います。

VB.NETはnotは非常に人気があるように感じますが、Visual Basicの「クラシック」はまだ1です。その理由は、Windowsアプリを作成するのが非常に簡単だからです。これをC++/MfcのWindowsアプリと比較します。これは、現時点でほぼ唯一の代替手段でした。

同じ理由で、Delphiはかつて非常に人気がありました。

3
PhpFlashGuy

その理由の一部は、私が行ったように.NETに入る古いASPプログラマーがVBに既に慣れているためですVBスクリプトは言語ASPですほとんどの部分で使用されているクラシック。 .NETでのVBでの記述は、VBの話し方をすでに知っているため、時間を節約できると感じました。 VBもC#より泣き虫ではありません。私はどちらでも読み書きできますが、VBの方が好きです。なぜなら、あなたが新しいプログラマーであれば、友達を作るのは簡単だからです。

3
Eric

私は両方を使用する環境で働いています。クラシックASPとVBを優先してC#に切り替えました。私の意見では、言語間に契約違反はありません。ほとんどのプロジェクトでは、両方の言語で同じ作業を行うことができます。今はエラーが発生しやすいという意見を共有してください。また、VB=が散らかっています(理由はありません)。

他の人が述べたように、VBは非常にシンプルで、歴史的にプロジェクトを非常に速く構築できました。これはWeb開発(これは高速に開発されています)で生きてきましたが、C#が開発が速くなると、VBはフェードアウトします。それがフェードアウトすると思うもう1つの理由は、Webアプリケーションを作成するときに(CSS、JavaScript)でコーディングする他のすべてのものがVBよりもC#のように見えるためです。初心者でもC#を使用するのは理にかなっています。

2
miccet

私は個人的に 'handles'キーワードを使用してvb.netでイベントをアタッチする方法が好きです... IDE/Visual Studio /もVBそして、ほとんどのend-ifなどを自動的に処理します... C#はもちろんはるかに簡潔でクリーンです(IMHO、私は両方でかなり作業しました)

2
Petar Kabashki

4.0フレームワークの時点で、C#に比べてVBが不足している)のごく一部があり、その逆も当てはまります。

  1. 最も注目すべき点は、VB.NETにYieldキーワードがないことですが、新しい非同期フレームワークを備えたVB.NETに間もなく登場します。
  2. unsafeキーワードはありません。必要だとは思いませんでしたが、きっと必要な人もいます。
  3. 複数行の文字列はありません。複数行の文字列は、行全体で+(またはレガシー&)演算子を使用することによって実現されます。または、XMLリテラル構文_Dim s = <s>My string... multiple lines...</s>.Value_を使用して実現することもできます。それはきれいではありませんが、うるさくなくて複数行の文字列が本当に必要な場合は機能します。そして、これは_<%= myVar %>_構文を使用して文字列補間を行うことができます。
  4. dynamicに相当する変数スコープの変数はありません。動的変数は、VBで_Option Compare Off_を使用して長い間存在していましたが、ファイルスコープなので、dynamicbecause dynamicがスコープを宣言した変数のみに制限します仕方。
  5. VBには簡潔なラムダ構文がありません。ラムダはありますが、Function(x)またはSub(x)を使用する必要があります。

VB.NETの一部の機能には、C#にはない機能があります。

  1. XMLリテラルは、XMLだけでなく、あらゆるものに便利です。
  2. 言語の大文字と小文字を区別しないのは猫の鳴き声です。他の多くの言語ではそれが許可されていませんが、入力中にShiftキーを押す必要がなく、コードを希望どおりに自動フォーマットするだけで、コーディングの速度にどのような違いがありますか。
  3. しばしば不必要なSelect句はLinqクエリから省略できます。
  4. Nothingキーワードは、nullよりもはるかに便利です。値(型も含む)はすべてNothingに設定でき、デフォルトが設定されます。 defaultキーワードは必要ありません。
  5. VB.NETは常にVisual Studioでコンパイルされるため、すぐにエラーが表示されます。 C#のように1日中CTRL-SHIFT-Bを押す必要はありません。

私の店ではVB.NETを使用してRazorでMVC3を行っています。(ほとんど根拠のない)偏見を乗り越えたら、実際にはとても使いやすい言語です。ラムダの場合を除いて、多くの主張ほどC#よりも冗長ではなく、C#とほぼ同等の機能です。私は、嫌いな人のほとんどが、現代のVB.NETでコードを作成していないことがわかっています。

2
mattmc3