it-swarm.cn

为什么VB

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

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

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

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

VB可用于使GUI(发音为gooey)跟踪IP地址。这通常用于 解决犯罪

47
Rick J

我认为这取决于您来自哪里。以程序员的身份开始时,我认为VB)可能比C#读起来更容易(eaerier接纳普通人。

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

42
Fredrik Mörk

下面,我刚刚复制了我的 回答到另一个线程

我定期开发VB和C#,我的大部分赚钱都涉及C#。就我个人而言,我更喜欢VB所有……lambdas!)的工作,除了乔恩概述的优点外,我真的无法说出任何硬性优势。实际上,赫夫里德(Herfried)在他的 网站 (德语!)中收集了一些优势。技术。

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

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

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

我不喜欢VB因为My命名空间,我不喜欢它是因为XML文字,我不喜欢它是因为类型弱,我不喜欢因为可选参数或更好的switch语句,所以不喜欢它。不,由于语法,我更喜欢它。


就是说,我必须承认VB)越来越受到语法的困扰。最新的炒作似乎是用lambda函数参数化的Linq查询,我很容易承认这可以做很多事情不幸的是,VB的lambda语法太麻烦了,无法与C#竞争。请考虑对Parallel.For看起来像VB –与C#相比,看起来很自然。)恕我直言,VB设计团队在这里走错了方向,偏向保守一致性高于可读性。


要回答您的主观指责:

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

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

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

精通一种语言意味着识别代码中的模式。实践证明,编写良好的代码看起来很优雅,而糟糕的(慢速,容易出错的)代码则很难看。就这么简单。


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

27
Konrad Rudolph

对我来说,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成为绕过VB)中缺少异常的缺陷的一种不太好的方法。

15
coobird

您对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等。这使得GUI VB)更加舒适,并且您不需要通过designer
  • 可选参数被引入到新的C#中-因此它们看起来不错。
  • VB.NET同时具有严格和快捷方式布尔运算符。
  • do会在编译时检查语法错误,除非您像脚本语言一样运行VB.
  • End If}。当具有复杂的语法结构时,所有花括号都令人困惑,而具体的End ...可以帮助您确定尚未关闭的块。
  • XML Literals -XML脚本现在已成为代码的一部分,由intellisense完全支持。

总而言之,除了语法外,VB.NET和C#之间只有一些客观差异。 EG:由于更好的事件系统和更好的VB,因此GUI设计在IDE中效率更高,而例如,算法可以在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网站。
  5. Java小程序。

当时,我们正处在Dot-Com泡沫破灭之前,因此,凡是对(4)或(5)持平的人,都会去讨论他们所吸引的任何令人惊奇的网络公司的股票期权。

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

因此,我们剩下VB和VC++:

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

在Visual C++中构建丰富的UI是另一个挑战。尽管对对话框和SDI/MDI表单提供了Visual Editor支持,但它的功能相当有限。支持将OLE控件(ActiveX)嵌入到MFC或Win32中)是一件黑手艺,尽管在ATL中要容易一些。仅组件中自定义事件所需的连接点。

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

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

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

当Visual J ++和Visual Interdev在VS6中问世时,很明显,Visual Basic IDE)在Visual C++上赢得了一场战斗,这是公平的恕我直言。 Studio .NET具有适用于新[〜#〜] cool [〜#〜]C#语言的类似于VB的表单编辑器。

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


VB)如此全面的产品的原因可能与Microsoft的起源有关,而Basic是其旗舰开发产品,但我不知道。 t目前没有任何引用。

7
JBRWilkinson

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

6
Brian Rasmussen

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

6
iburlakov

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

几年前,我改用Ruby,现在改用python,我再也受不了丑陋的分号,花括号和其他无意义的字符。源代码是供人类阅读的。当我尝试使用Visual Studio时,我选择了VB)而不是C#。我怀疑有些程序员选择C#只是为了“看起来很认真”,类似于Java语法,但是来吧,具有相同的功能...让您的眼睛休息一下。

6
vincent

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

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

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

4
Powerlord

很多VB)流行起源于VB的工具比其他可用语言友好得多的时期。“经典” VB提供了一种简便的Windows构建方法应用程序而无需学习Win32 API的精髓,也不必手动进行内存管理。VB)比C++低得多,因此对于初学者来说,入门的门槛要低得多,所以很多人不屑一顾与VB。

这些天,我认为VB)对于那些使用VB多年来)的人来说,与C#相比,一个优势是熟悉的。另一个优势是VB代码易于阅读,因为倾向于使用关键字而不是标点符号。作为在VB,Java,C,C#和Python中工作的人,我发现VB =是回顾我几年前编写的代码时最容易使用的语言。语法更加冗长,通常使代码阅读更容易,并且Visual Studio始终在格式化方面做得非常出色VB代码可在您键入时清理格式,以便使代码一致地格式化(无论作者的草率如何)。

附带说明一下,由于类似的原因,我发现Python非常容易阅读和查看。在Python中,代码的格式由解释器而不是IDE强制执行,但最终结果是相同的。Python也偏爱关键词而不是VB。

4
gbc

仅举几例:

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

很难说它比任何其他语言都“或多或少容易出错”。我还对“绝大多数商业MS网络”的观点表示怀疑。从我所看到的情况来看,C#迄今为止在.NET开发方面处于领先地位(.NET是MS堆栈中用于不是设备驱动程序等内容的旗舰工具)。

3
Marc Gravell

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

3
chugh97

与C#相比,VB.NET的一个优势(将在C#4中消失)是默认和命名参数,这是使用VSTO时非常不错的事情。

3
Blake Pettersson

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

3
NinethSense

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

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

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

3
PhpFlashGuy

我认为部分原因是因为像我一样,进入.NET的旧ASP程序员已经非常熟悉VB,因为VB脚本是ASP语言大多数情况下使用经典。我感觉用.NET的VB编写代码花费的时间更少,因为我已经知道如何说VB。 VB也比C#少哭。我可以读/写两者,但我更喜欢VB,因为如果您是新程序员,很容易结识朋友。

3
Eric

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

正如其他人所提到的那样,VB非常简单,从历史上讲,您可以非常快速地构建项目。这在Web开发中(快速开发)得以延续,但是我认为当人们意识到C#只是随着开发的迅速,VB将会淡出。我认为它会淡出。即使对于初学者,使用C#也很有意义。

2
miccet

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

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的变量作用域等效项。动态变量已经使用_Option Compare Off_在VB中存在很长时间了,但是它是文件作用域的,所以它不如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中进行编码。

2
mattmc3