如果我不声明变量的类型,主要问题是什么?比如,Dim var1
与Dim var1 as Integer
。
答案 0 :(得分:7)
在允许您使用变体类型的语言中声明变量类型的主要原因是检查自己。如果你有一个变量用于保存一个字符串,然后偶然将它传递给一个需要整数的函数,编译器就无法告诉你你搞砸了,除非你告诉它该变量应该始终是一个字符串。相反,你坚持把你的字符串重新解释为一个整数,这几乎永远不会给你你想要的东西,结果可能会令人困惑,而且很难找到错误。
在几乎所有语言中都有很多构造,你可以把它放在一边,你的程序可以工作,但作为对程序员的检查存在。编译器的第一项工作是将您的代码变为可执行文件。但编译器的第二项工作是尽可能地尝试确保程序员没有犯错误。特别是当程序变大时,让编译器发现这样的错误更容易,而不是相信你输入的内容完全正确。
此外,通常会有一些与变体相关的处理开销,但这是一个较小的问题。
答案 1 :(得分:3)
有几个原因:
Variant
类型的事物有一个很小但非常重要的成本。lblTitle
告诉您某些内容应该包含Label
)。答案 2 :(得分:1)
其他人已经提到过Intellisense,但是值得重复。
此外,当您为变量声明显式类型时,编译器可以对您的代码执行各种额外的类型检查和验证,否则这些都是不可能的。现在发生的是,现在某些非常常见的错误在编译时而不是运行时被捕获并修复。用户永远不会看到它们。您不希望为运行时留下错误。
你说“它可能是任何东西” - 这是真的。但是你继续说“所以一定要好”。这不一定遵循,而且非常危险。并非一切都可以分配或与其他一切相结合。它可以是任何东西 - 但它是某种东西,或者更具体的东西。如果没有显式类型,编译器无法知道什么,也无法帮助您避免错误。
答案 3 :(得分:0)
从表面上看,如果你没有声明类型,Intellisense无法帮助你,因为它不知道它是什么类型。
答案 4 :(得分:0)
将此与Python的打字系统进行对比。 Python允许开发人员使用变量而不预先声明类型但是一旦使用了变量,类型就是固定的。相反,变体最初可以被赋予任何类型的值,并且稍后可以存储不同类型而没有任何警告或抱怨。因此,您可以将字符串放入以前保存数字的变量中。
Dim myvar1
myvar1 = 1
'A whole lot more code
myvar1 = "this string"
如果你必须维护别人的代码,你就会开始理解为什么这种事情(默默地改变一个变量类型)可能会非常难以维护。特别是如果你使用模块级变量,这可能会导致一些非常有趣的问题。这与在VB代码中使用Option Explicit的行相同。如果没有Option Explicit,你可以在没有意识到的情况下做到这一点:
myvar1 = 1
'A whole lot more code here too
myvarl = 2
在某些字体中,这两个变量名称无法区分,这可能导致一些难以发现的错误。