我正准备一个Visual Basic 2005上的课程,目标是Visual Basic 6程序员迁移到.NET平台。
我想就是否建议他们始终启用 Option Strict 提出建议。
我专门使用C风格的编程语言,主要是Java和C#,所以对我来说,显式投射是我一直希望我必须做的事情,因为它从来都不是一个选择。
但是我认识到使用内置支持后期绑定的语言的价值,因为不必过分明确代码中的类型确实可以节省时间。即使在具有动态语言运行时的.NET平台上,动态类型语言的流行扩散进一步证明了这一点。
考虑到这一点,如果第一次使用VB.NET和VB6背景接近.NET的人应该被鼓励进入必须使用编译时类型检查的思维模式,因为那是CLR中的“最佳实践”吗?或者继续享受后期约束的好处是否“还可以”? p>
答案 0 :(得分:26)
是的! Option Strict绝对是.Net的最佳实践。强调.Net是强类型平台的核心,直到DLR得到更完全的支持。除了少数例外情况,每个Dim
和Function
都应该声明一个显式类型。 LINQ或Boo和JScript之类的东西是证明规则的例外。
以下是其他一些需要指出的事项。我相信你很清楚这一切,但我必须使用并维护很多由前VB6ers编写的VB.Net代码,所以这对我来说是一个痛处:
LEN()
,REPLACE()
,TRIM()
等oMyObject
和sMyString
不是犹太教徒。如果他们不相信你,请在Microsoft's Design Guidelines中向他们展示参考。AndAlso
/ OrElse
逻辑运算符CreateObject()
。IEnumeralbe(Of T)
),并了解他们为什么不再使用ArrayList
。我可以坚持下去,但我会指出你的Hidden Features of VB.Net问题来解决这个咆哮。
答案 1 :(得分:18)
使用Option Strict启用开发的时间将为您节省大量的调试时间。
答案 2 :(得分:8)
Option Strict
显然不能取代良好的单元测试 - 但是反过来也没有。虽然单元测试可以检测到与Option Strict
相同的错误,但这意味着单元测试中没有错误,单元测试经常提前完成等等。
编写好的单元测试并不总是微不足道的,需要时间。但是,编译器已经实现了一些测试 - 以类型检查的形式。至少,这节省了时间。更可能的是,这节省了很多时间和金钱(至少偶尔),因为你的测试是错误的/没有涵盖所有情况/忘记考虑代码的变化。
总结一下,无法保证您的单元测试是正确的。另一方面,有一个强有力的保证,编译器执行的类型检查是正确的,或者至少是它的毛刺(未经检查的数组协方差,带有循环引用的错误......)是众所周知的并且有充分的文档记录。
另一个总结:是的,Option Strict On
绝对是最佳做法。事实上,我已经在这样的在线社区工作了多年。每当有人需要帮助显然没有Option Strict
启用的代码时,我们会礼貌地指出这一点并拒绝提供任何进一步的帮助,直到修复完毕。它节省了很多时间。通常,问题在此之后就消失了。这有点类似于在HTML支持论坛中寻求帮助时使用正确的HTML:无效的HTML可能有用,但话说再次,它可能不是问题的原因。因此,许多专业人士拒绝提供帮助。
答案 3 :(得分:5)
YES !!!!
在我看来,无论是作为开发人员还是作为大学导师,都是。
最好从一开始就养成良好的习惯,这使整个过程变得更加容易,而Option Strict是我认为需要的元素之一。
加入
有很多原因可以列举为什么,但关键是它是最佳实践,在教授新语言时,从一开始就教授这些最佳实践是关键。
答案 4 :(得分:4)
请记住,这里有两个级别。
选项明确 选项严格
两者的主要区别在于Option Strict禁用VB自动转换不同的数据类型。您必须明确使用CType或其他数据转换函数将变量分配给另一种类型。
我从1.0开始就使用VB,虽然我可以看到这一点,但我认为Strict在处理已实现或继承不同接口和类的对象时过于热心。
我首先会从Strict开始,如果它开始妨碍你,那么就下降到Explicit。但是,不要两个都关闭,这种方式是疯狂和过多的调试时间。
多年来使用VB我几乎都使用Double来表示所有浮点变量。这样可以避免许多舍入和精度损失的问题。在VB6中,我使用long,因为它是32位整数,但Integer在.NET中的工作方式与Int32相同。我还建议使用Int32,Int16等代替Integer,Long等,以防微软决定重新定义这些关键字。
答案 5 :(得分:3)
我不同意RS Conley(很不寻常)。我最喜欢的VB6大师 - Francesco Balena,Dan Appleman - 都不喜欢VB6的自动转换,并且是.NET中Option Strict
in的Option Strict
。许多经验丰富的VB6程序员都知道自动转换为“邪恶类型强制”(favour),并且很高兴能够启用Option Strict
。
使用一个没有{{1}}的小模块有时会更好,以避免大量复杂的反射代码。但这是证明规则的例外。
答案 6 :(得分:2)
鉴于Boehm的观点,即在开发周期早期修复问题消耗的资源最少,我是每个工具的粉丝,可以帮助开发人员尽早“正确”。出于这个原因,我是IntelliSense之类的倡导者,既可以提高效率,也可以帮助您在周期的早期实现工作代码。 (工作,但必然正确。)
出于这个原因,我也支持使用Option Strict作为一种方法来帮助防止错误和随后的修正深入“设计时间”。
答案 7 :(得分:0)
如果您习惯于检查类型,那么您可能希望选项严格。关闭它可能有好处,但如果你的大脑没有调整到发现你的编译器通常会抱怨的错误,那么我会说让它保持开启。我已经在VB.Net中工作了很多,而且我不得不说,即使我在大多数时间都使用了严格禁用的选项,我已经看到很多情况下打开它会阻止很多错误。