为什么VB如此受欢迎?[关闭]


28

对我来说,Visual Basic看起来笨拙,丑陋,容易出错并且难以阅读。我让别人解释 原因。尽管就功能而言,VB.net显然是该语言的巨大飞跃,但我仍然不明白为什么有人会选择使用VB而不是C#进行编码。

但是,我仍然看到(似乎是)“ MS商店”中的绝大多数商业Web应用程序都是在VB中构建的。我可以对此进行纠正,但是VB似乎仍然比应有的受欢迎。

任何人都可以帮助回答以下任何(或全部)问题:

  • 我在VB中缺少什么吗?它比C#更容易学习还是“更友好”?有我不知道的功能吗?
  • 为什么今天这么频繁使用VB / VB.net,尤其是在Web项目中?

4
您如何知道建立了哪些商业Microsoft网站?
萨姆森(Samjudson),2009年

30
“为什么今天这么频繁使用VB / VB.net?”有点像问“为什么今天在运输中经常使用mu子/卡车?”
丹尼尔·达拉纳斯

2
只是为了后代,我(矫正地)站了起来。VB有一个非常忠实的用户社区,这非常糟糕。

5
这个问题应该删除。

25
不要删除此问题。这是不好的,有偏见的和主观的,但它经常发生并且可以作为参考。
康拉德·鲁道夫

Answers:



42

我认为这取决于您来自哪里。当我以程序员的身份入手时,我认为VB可能比C#更容易阅读,因为它更多地依赖于单词而不是符号,这使得普通人更容易接受。

我曾是VB程序员很多年,当.NET出现时,我在VB.NET中工作了头几年(对C#并没有真正的意义)。现在我已经落后了C#几年了,有时我发现VB.NET代码对我进行“解码”所需的时间比C#代码花费的时间更长。可能是因为在某些构造中它更多地依赖于单词而不是符号...


5
您也很好地描述了我的情况。

6
这里也是一样-从C样式的语法角度来看,VB.NET代码充满了“噪音”。对任何VB开发人员都没有冒犯。从C#到VB时的感觉就是如此。

2
同意,我受不了VB.NET-语法就像一个故事……是的,我不得不连续使用了几个月,这让我发疯,我喜欢C#语法。
德尔

2
C#程序员不是普通人吗?
2011年

@rightfold不。VB.net程序员也不正常。VB.net程序员比普通人和C#更强大。= D VB.net规则!!!!!
匿名企鹅

27

下面,我将答案复制到另一个线程

我定期使用VB和C#进行开发,我的大部分赚钱都涉及C#。就个人而言,我更喜欢VB进行大多数(但不是全部……lambda!)工作。除了乔恩(Jon)概述的那些硬性优势,我无法说出任何硬性优势。实际上,Herfried在他的网站上收集了一些内容(德语!),但是它们是非常技术性的。

关于所有与C相关的语言的真正困扰我的是愚蠢的语法。这纯粹是一种文化,但是作为一个用C ++从事大多数专业工作并且精通它的人,我仍然绝对讨厌语法。不仅是C ++的可爱小怪癖。不,整个包裹。为什么要大括号?为什么要使用分号(也许是整个编程历史上最愚蠢的决定)?为什么使用愚蠢的C样式转换语法?为什么没有用于变量声明的关键字(实际上,是最愚蠢的决定)?

太多的事情真的让我难过和生气。VB不是圣人,它的语言有巨大的缺点。但是与我上面所说的相比,没有任何东西。

我意识到这些声明中的大多数都需要理由,但是我提出这仅仅是因为我们已经习惯了它们。此外,这里不是正确的地方。可以说C#的语法虽然比VB更具优势,但它也是其主要劣势。

我不喜欢VB是因为有My名称空间,我不喜欢是因为XML文字,我不喜欢它是因为弱类型输入,我也不喜欢是因为可选参数,或者因为更好switch声明。不,由于语法原因,我更喜欢它。


就是说,我必须承认VB的语法变得越来越麻烦。最新的炒作似乎是用lambda函数参数化的Linq查询,我很容易承认这会使许多事情变得更简单。不幸的是,VB的lambda语法太麻烦了,无法与C#竞争。只需考虑一下Parallel.ForVB中的调用看起来有多膨胀-与C#相比显得自然。恕我直言,VB设计团队在这里走错了方向,主张保守的一致性而非可读性。


要回答您的主观指责:

对我来说,Visual Basic看起来笨拙,丑陋,容易出错并且难以阅读。

您当然有权这样想,但正如Marc在下面所说的那样,您将很难客观地对此进行争论。我绝对可以引用许多 C语法元素,它们比VB中存在的任何语法在客观上更容易出错。实际上,已经开发了VB语法来明确防止此类情况。

“笨拙,丑陋……难于阅读”是所有限定词,几乎可以标记您不熟悉的所有语言。简而言之:丑陋是您对语言不熟悉的直接结果。

精通一种语言意味着识别代码中的模式。精心编写的代码通过实践virtuel显得优雅,而坏的(速度慢,容易出错)的代码将出现难看。就这么简单。


最后一句话:您引用的文章包含一些错误和过时的信息。作为进行高度主观和情感讨论的唯一理由,它们不太适合。


4
布雷克:是的,露比要点。最后是一种正确的语言。Python也给我很高的分数。不过,我对所有现有的语法都不满意。
康拉德·鲁道夫

2
Ruby很烂:P ...现在我已经解决了这个问题...基于括号的关键字之间语法差异的真正原因归结为易于编写解析器。我曾经是一个巨大的VB(BASIC一般)迷,但是,因为我已经转移到C#我觉得它更容易和更快地工作。
马太福音粉饰

4
为什么要大括号?因为如果使用得当,它们会在视觉上划分代码块。是的,我意识到VB中的缩进也可以做到这一点,但是括号可以更清楚地显示IMO。分号使编译器的工作变得更加轻松(只需向VB编译器团队咨询一下)。我发现使用C#进行转换非常直观且紧凑。还有就是一个变量声明关键字:var
罗伯特·哈维·

1
@Robert Harvey:1)VB使用关键字来表示块,而不是缩进。非常清楚。2)关于强制转换,C ++很久以前就正确选择了弃用C样式强制转换,因为它在视觉上太不起眼了(不是一件好事;强制转换应脱颖而出,因为它引入了改变的语义和类型用法的潜在弱点)。3)不。我的意思是在每个声明之前加句法提示。var int x浮现在脑海。所有其他语句和块均由专用关键字引入,为什么不声明变量和方法呢?菲 前后不一致。
康拉德·鲁道夫

4
@Konrad:我承认起初需要一点时间来适应。从哲学上讲,部分差异可能是我不再像以前使用VB进行编程那样将编程语言视为英语的一种变体。转向C#使得我在编程语言上使用了更多的符号(简洁),而又不太模糊。这种象征意义使我有精神上的自由,可以从概念上对诸如面向对象,消息传递和lambda之类的事物进行思考。
罗伯特·哈维

15

对我来说,Visual Basic看起来笨拙,丑陋,容易出错并且难以阅读。

对我而言,英语似乎笨拙,丑陋,容易出错,而且很难阅读,尤其是那些语法不佳,拼写不佳,鲁capital无视大写字母和标点符号,不懂如何在空间和精神上组织思想的人。

不仅因为语言的语法,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

至少,这更易于理解。仍然是BASIC。归根结底,程序员能够以一种易于阅读的方式格式化代码,使用名称明确的标识符并专注于编写可理解的代码来清楚地表达自己的意图。

就是说,自VB3以来,我还没有接触过Visual Basic,(因此示例使用了“旧”语法),但是仅仅因为一种语言可以被滥用并不意味着它不能被正确地用来编写相当健壮的代码。当然,可能存在一些缺陷,但是为解决这些问题而设计的方法也显示了一个程序员相对于另一个程序员的技能。

On Error Resume Next在过去。NET时代,喷涂是解决VB中缺少例外的缺陷的一种不太好的方法。)


13

您对VB的大部分论点仅适用于VB-Classic(第二个链接)或基于模糊或过时的论点

  • 即使在VBC中,您也不会使用GoSub ... Return等。
  • 这有什么错static?C ++也支持这一点。
  • VB10引入了隐式的行连续(您甚至不需要像C#这样的多余的Semicola)
  • C ++和C#中也存在不同的转换函数。C#的(object)(expr)-Cast-Syntax object as type甚至更加混乱和不一致。
  • 有什么不好的with?您可以以非常直观的方式创建嵌套树结构,这在C#中是不可能的。
  • VB中的事件处理比C#中的优雅得多。您可以通过单个关键字(WithEvents)引入和处理事件,而不必初始化委托,eventhandler-procs等。这使VB中的GUI编程更加舒适,并且您无需由设计人员生成事件代码。
  • 可选参数被引入到新的C#中-因此它们看起来不错。
  • VB.NET有两个严格和快捷,布尔运算符。
  • 检查在编译时的语法错误,除非你运行像VB脚本语言。
  • End If不仅仅是有用}。当具有复杂的语法结构时,所有花括号都令人迷惑,而具体End ...帮助您确定尚未关闭的块。
  • XML文字-XML脚本现在是代码的一部分,由intellisense完全支持。

总而言之,除了语法之外,VB.NET和C#之间仅有一些客观差异。EG:由于更好的事件系统和更好的IDE,GUI设计在VB中更加有效,而例如,由于语法简洁,可以在C#中更好地表达算法。

剩下的只是您个人风格的问题。C风格的程序员对C#,VB(或者也许是Pascal?)感到满意。C风格的程序员使用VB。

但是,与C中的所有符号相比,对于初学者而言,基于单词的更明确的VB语法可能更易于阅读。比较:

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++;
}

1
如果不初始化countZeros(在本地范围内)并且为if语句中的data [i]赋值,C#将给出编译错误。我知道您在评论中引用了c / c ++,但我相信OP

1
以我的观点,VB10击败了C#10大时代!
Shimmy

我喜欢所有语言:LISP,C,VB,PHP,您可以命名。
systemovich 2011年

+1,我要补充一点,VB的Switch语句并非像C#那样没用。
乔尔·布朗

12

从历史上看,VB开发环境是构建某些类型的应用程序(例如GUI应用程序)的快速有效的方法。因此,它是一个非常受欢迎的选择。我认为VB是全盛时期最常用的语言(例如VB6)。

有了这种已安装的基础,不足为奇的是,这仍然令人惊讶。


2
+1 afaics VB6尤其是VS IDE提供了一个(非常低的)进入门槛,这创造了新一代的编码器,其中包含了所有的问题和可能性

7

这一切都在C#存在之前就开始了

回到1999年,我们有了Visual Studio 5/6。如果您是使用Windows的独立软件供应商或公司,并且需要编写一个可以例如跟踪员工在项目上花费时间的应用程序,则可以选择以下几种方法:

  1. Visual Basic中的表单。
  2. Visual C ++中的MFC,ATL或Win32。
  3. Access 97/2000中的表单。
  4. ASP网站。
  5. Java applet。

当时,我们正处在Dot-Com泡沫破灭之前,因此,凡是对(4)或(5)表示满意的人,都去参加他们被其吸引的惊人的网络公司的股票期权谈判。

(3)在锁定和总体可伸缩性方面存在问题,但是我看到了许多由访问驱动的解决方案,这些解决方案可以根据需要运行支持功能。

这样就剩下了VB和VC ++:

当时,VB中的Forms编辑器在生产率方面非常出色。您可以拖放组件-不仅可以拖放按钮,标签和文本框,还可以拖放可重用组件的完整“ OLE控件”工具箱,例如聪明的Grids,Excel工作表或IE实例。连线是在后台进行的-一切都像对象一样,您只需双击事物即可添加事件处理程序。在Visual C ++中,这要困难得多。当时,作为Visual Studio开发人员支持团队的成员,我记得Visual Basic支持呼叫主要是关于哪个组件最适合使用或如何以某些方式优化其应用程序。几乎从来没有“我如何制作具有X,Y和Z用户界面功能的应用程序”。

在Visual C ++中构建丰富的UI是另一个挑战。尽管对对话框和SDI / MDI表单提供了Visual Editor支持,但它的功能还是相当有限的。将OLE控件(ActiveX)嵌入到MFC或Win32中的支持是一门妖art的事,尽管在ATL中要容易一些。连接诸如调整大小事件或所有者绘制之类的简单操作非常痛苦,更不用说组件中自定义事件所需的连接点了。

是的,VC ++具有执行速度,调试能力和灵活的框架/库/ UI选项,但是IDE支持无法涵盖所有​​方面,因此可以通过向导,全面的MFC类层次结构和90天等解决最常见的操作/ 2-free-idents支持行。

IIRC,VB附带的应用程序打包器,可以打包您的应用程序,VB运行时和最新的通用控件DLL,并为您提供一个独立的EXE安装程序,您可以将其放置在CD上并提供给客户。“您已安装了哪个msvcrtXX.dll和mfcxx.dll?”都没有,这困扰着MFC开发人员。

因此,出于上市时间和丰富的用户界面的原因,VB得到了很大的关注。

当Visual J ++和Visual Interdev在VS6中出现时,很明显,Visual Basic IDE赢得了与Visual C ++的较量,这是公平的恕我直言。毫无疑问,Visual Studio .NET为新的COOL C#语言提供了类似于VB的表单编辑器。

类似于Java / C / C ++的新语言,再加上VB人们一直喜欢的UI设计器,为现在使用MFC / ATL / Win32的C ++人们提供了新的迁移途径。对于不喜欢VB.net中缺少100%向后兼容性的VB 3/4/5/6的人们,这提供了一个在熟悉的环境中学习新语言的机会。


VB之所以如此全面,其原因可能与Microsoft的起源有关,而Basic是其旗舰开发人员产品,但目前我没有任何引用。


6

但是,任何给定的语言都很丑陋可能是坚持使用它的原因通常归结为:废弃庞大的代码库非常昂贵,并且开发人员已经知道该语言,这使得它比其他语言便宜使用。


6

我认为,VB.NET更容易学习,您是对的,并且总体上比C#更容易。这是VB如此受欢迎的第一点。另一个也是我认为最大的一点是,使用VB 6和较旧版本的该语言的开发人员数量众多,与使用新语言相比,使用VB.net开发应用程序更容易。


6

正如其他人所说,您对语言语法的美学判断在很大程度上取决于您之前所知道的。十多年来,它看起来像是一次C风格的竞赛,其中大括号表示“块”,“->”表示间接(perl,php),括号表示函数调用参数,//注释,并在每行结尾处使用分号。甚至有人认为,得益于这种“笔法独特”,如果您懂一门语言,就可以全部了解他们,这确实是荒谬的。但是,这在C ++ / Java人群中灌输了唯一正确的语法美感,其他任何尝试克隆COBOL的想法。

几年前,我改用ruby,现在改用python,我再也受不了丑陋的分号,花括号和其他无意义的字符。源代码是供人类阅读的。当我尝试Visual Studio时,我选择了VB而不是C#。我怀疑有些程序员选择C#只是为了以其类似于Java的语法“看上去很认真”,但是,拜托,这里有完全相同的功能……让您休息一下。


4

好吧,如果您正在谈论.NET,那么我可以想到一个非常简单的东西:

与C#相比,Visual Studio中的VB.NET编辑器在捕获语法错误方面要好得多。

尽管C#的编辑器在VS2008 SP1中进行了很大的改进,但仍然存在一些语法错误,直到您尝试编译该程序时,编辑器才会发现这些错误。


正是由于这种后台编译,才使得在VS2005中编辑大型VB项目非常缓慢。无论如何,这就是ReSharper的目的;)
卢卡斯(Lucas

不仅是后台编译,自动格式化和代码清除工具还可以修复很多问题,甚至在您移出该块触发编译之前。与c#相比,这在vb中节省了很多时间
Bill

4

VB的普及很大程度上源于VB的工具比其他可用语言更加友好的时代。“经典” VB提供了一种构建Windows应用程序的简便方法,而无需学习Win32 API的精髓或手动进行内存管理。使用VB的入门程序员的门槛比使用C ++低得多,因此很多人都喜欢使用VB。

这些天来,我认为VB相对于C#的一个优势是对使用VB已有多年经验的人很熟悉。另一个优点是,由于倾向于使用关键字而不是标点符号,因此VB代码易于阅读。作为使用VB,Java,C,C#和Python的人,我发现VB是复习我几年前编写的代码时最容易使用的语言。语法更冗长,通常使代码阅读更容易,并且Visual Studio一直在格式化VB代码方面做得很好,可以在您键入时清理格式,以便始终如一地对代码进行格式化(无论作者的草率如何)。

附带说明一下,由于类似的原因,我发现Python非常易于阅读和查看。在Python中,代码的格式由解释器而不是IDE强制执行,但最终结果是相同的。Python也偏爱标点符号,尽管可以说比VB少。


3

很难说它比任何其他语言都差不多“容易出错”。我也对“绝大多数商业MS网络”的观点表示怀疑。从我所看到的情况来看,C#到目前为止一直是.NET开发的领导者(.NET是MS堆栈中用于不是设备驱动程序等内容的旗舰工具)。


3

与C#相比,VB.NET的一个优点(随C#4消失)是默认值和命名参数,这是使用VSTO时非常高兴的事情。


而且,就此而言,“动态”-为C#提供类似于VB现有的后期/调度绑定的功能。
马克·格雷韦尔

1
这个所谓的优点一直对我来说是个问题-我的读物是C#具有重载,这是实现相同实际结果的一种更安全的方法。

2
重载的缺点是,当您要设置一些默认值时,它们更加难以维护。您可能会遇到复杂的重载链,这些重载将编译器编译为嵌套的方法调用,而不是由编译器直接解析为该方法。
马修·怀特(

3

VB / VB.NET属于RAD(快速应用程序开发)类别。您可以使用工具箱中的拖放控件和更少的代码来开发应用程序。


您可以对ASP.net + C#组合说同样的话,不是吗?

是的,大多数基于Visual Studio的语言都支持。

好吧,在VB(不是.net)时代,还没有C#等。因此,VB是当时唯一的优秀产品。后来的VB用户迁移到VB.NET。VB <> VB.NET无论如何。

3

好吧,我认为您必须区分经典VB和VB.NET。

我觉得VB.NET 不是很流行,但是Visual Basic“经典”仍然是1,原因是创建Windows应用程序非常容易。将此与C ++ / Mfc中的Windows应用程序进行比较,这几乎是此时的唯一选择。

出于同样的原因,Delphi曾经很受欢迎。


我同意VB.net不如经典VB受欢迎。一些无法将其代码库迁移到VB.net的开发人员可能已经选择使用C#。
JBR威尔金森2011年

3

与区分大小写的C#相比,VB非常冗长且易于使用。对于新手程序员来说,这是最好的起点。


3

仅举几例:

  • 便于使用
  • 熟悉的名称(基本是最早流行的计算机编程语言之一)
  • 不要小看微软的营销

3

我认为部分原因是因为像我所做的那样,进入.NET的老asp程序员已经非常熟悉VB,因为VB脚本大部分是ASP经典语言。我感觉用.NET用VB编写的时间减少了,因为我已经知道如何讲VB。VB也比C#少哭。我可以同时读写这两种语言,但我更喜欢VB,因为如果您是新程序员,很容易结识朋友。


2

我在同时使用两者的环境中工作。我们已经改用C#来支持经典的ASP和VB。我认为这两种语言之间没有交易障碍。对于大多数项目,您可以使用两种语言进行相同的工作。现在,我确实分享了您对容易出错的观点,并且我还发现VB变得混乱(无缘无故)。

正如其他人提到的那样,VB非常简单,从历史上看,您可以快速构建项目。这一直存在于Web开发(快速开发)中,但是我认为当人们意识到C#的开发速度同样快时,VB将会淡出。我认为它会逐渐消失的另一个原因是,使Web应用程序看起来比VB更像C#时所用的其他代码(CSS,JavaScript),因此即使对于初学者,也可以使用C#。


2

我个人喜欢用'handles'关键字在vb.net中附加事件的方式...在处理VB时,IDE / Visual Studio /也响应更快,并且可以自动处理大多数end-if等。 C#当然更加简洁明了(恕我直言,我已经做了很多工作)


我更喜欢自己订阅事件,而不是订阅“句柄”和VS设计师进行的所有神奇的幕后操作。
卢卡斯,

2

从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,但是这是文件的作用域,因此它还不如dynamic,因为dynamic限制的范围只对变量声明的方式。
  5. VB缺少简洁的lambda语法。Lambda在那里,但是您必须使用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#一样,整日都不会击中CTRL-SHIFT-B。

我的商店使用VB.NET在Razor上运行MVC3,一旦克服了(大多数没有根据的)偏见,它实际上是一种非常好的语言。正如许多人声称的那样,它确实没有比C#更为冗长(在lambda的情况下除外),并且它与C#几乎是逐个功能的。我发现大多数讨厌者在任何时间都没有真正在现代VB.NET中进行编码。


对于我来说,VB.NET太冗长。您必须手动打印很多样板代码,而ReSharper实际上并没有帮助。我已经在C#/ VB.NET中并行进行编码了3年了。
Hedin 2013年

由于关键字较长,VB的确水平冗长。尽管您不经常键入它们,因为IDE会为您放置它们。但是,由于花括号的原因,恕我直言C#通常在垂直方向上过于冗长。VB的其他一些优点:避免辩论花括号的样式,因为VB中只有一种样式。(舌头进入脸颊)避免因无休止地键入分号和大括号样板而使肌肉发达的右手小指肿胀。
MarkJ 2013年

1
@MarkJ:我发现C#拥护者批评它的方式很有趣AndAlso[尽管说的时候它比“双与号”短”,但是忽略了a If-Then/Else/EndIf需要三行加上受控语句的事实,而等效的C#至少需要四行除非大括号写成} else {一行,否则根据大括号约定可能为六个。
超级猫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.