vba - DefVar 是否有一个合法的用例?

标签 vba vb6

Def[Type] VBA 支持从 Hell 生成的语句,似乎是为了强制执行某种 Systems Hungarian符号。

例如:

Option Explicit
DefBool B
DefLng I, L

这些语句具有以下副作用:
Dim bSomething ' <~ that's a compile-time Boolean
Dim iGiveUp    ' <~ that's a compile-time Long
Dim lNooooo    ' <~ that's a compile-time Long also

和:
Public Function IsUseful()
' function returns a compile-time Long
End Function

我们不要忘记:
Public Property Get BasicStuff()
' yep, that's a compile-time Boolean
End Property

你明白了。 Def[Type]语句是血腥的邪恶,并且愿意在现代代码中使用它们应该可以通过键盘获得 10K 伏特*。

但是让我们敞开心扉,假装他们很棒。

有很多这样的说法:
  • DefBool对于隐式类型 Boolean
  • DefCur对于隐式类型 Currency
  • DefDbl对于隐式类型 Double
  • DefInt对于隐式类型 Integer
  • DefLng对于隐式类型 Long
  • DefSng对于隐式类型 Single

  • 然后是这个:
  • DefVar对于隐式类型 Variant

  • 现在,如果你不知道,这也是一个隐式类型的 Variant:
    Dim anything ' no "As [Type]" clause
    

    所以给定隐式类型Def[Type]关键字可以在给定一系列适用的首字母前缀的情况下指定隐式编译时类型...
    DefVar V
    Dim vSomeVariant   ' compile-time Variant (DefVar)
    Dim foo            ' also a compile-time Variant (implicit)
    Dim bar As Variant ' also a compile-time Variant (explicit)
    Dim vRedundant As Long ' compile-time Long ("As [type]" clause overrides DefVar)
    

    即使采用开放的、对系统匈牙利语友好的方法,我也无法理解 DefVar 的单一合法用例。 .有吗?

    *你的旅费可能会改变。

    最佳答案

    Deftype 语句来自更旧版本的 BASIC。我记得至少在 QBasic 中,变量默认是浮点数,如果需要不同的变量,可以使用后缀。 (所以,X 本身就是一个数字,你可以用 X$ 代替字符串。)如果有人用整数做数学运算(就像人们经常做的那样),可以使用 DefInt A-Z声明“默认”类型将是整数而不是浮点数,因此您不需要为所有变量添加后缀 %表示整数。或者,您可能会为整数指定一部分起始字母,而为浮点指定其余部分,如果您从 FORTRAN 或其他使用具有不同类型的不同起始字母的约定的旧语言移植代码,这可能特别有用。

    许多 Visual Basic 的设计都考虑到了能够直接使用 BASIC 早期版本中的代码片段而进行最小更改的用例,例如具有行号或使用“Let”来分配变量。我不是真正的历史学家,但我认为“系统匈牙利语”出现得较晚,特别是当人们习惯于使用超过一两个字母作为变量名时,因为计算机已经强大到足以处理这些事情。所以我有点不同意你的前提,因为我认为 Deftype 只是在 BASIC 中,因为以前的版本有它,而不是因为它旨在帮助强制执行特定的编码风格。

    我猜想特别添加 DefVar 只是因为他们添加了 Variant 作为一种类型,而且看起来 Variant 应该像他们拥有的其他类型一样处理,尽管我觉得也许是程序员用语言实现它很有趣认为它和你现在一样没用。

    显然,在 VB6 "new"时代创建的任何东西都不需要任何 Deftype,尤其是 DefVar,当然现在也不需要任何新东西。

    要回答您的实际问题,我唯一能真正想到的是,它有助于明确表明您有意使用默认的无后缀和非显式类型变量应被视为变体。也许在您的应用程序的某些模块中,您使用了 DefInt A-Z ,以及在您使用的其他模块中 DefVar A-Z ,就像一个编码标准,以确保任何默认值都是明确的并且易于理解。这有点牵强,但我肯定听说过更奇怪的编码标准。

    如果不出意外,如果使用一些外部工具来确保每个文件都以 Option Explicit 开头和 DefVar A-Z也许还有一些其他标准(如 Option Base ),那么您不必担心开发人员引入其他 Deftype 命令并让他们的同事希望他们的键盘会触电他们。

    关于vba - DefVar 是否有一个合法的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681307/

    相关文章:

    vba - 使用TransferDatabase将表从oracle导入到外部 Access 数据库

    string - 在 VB 6.0 中替换 ' with ' 时发生堆栈溢出

    vb.net - IsNumeric 对于包含 D 字符的字符串返回 true

    winapi - regsvr32 带/i 和不带参数的区别

    vb.net - 选择大小写

    mysql - DAO OpendataBase(DSN 对话框始终打开)

    vba - 从 Excel 调用 Word VBA MsgBox 函数

    vb6 - 从 VB6 在 Excel 中格式化

    vba - 为什么要在 VBA 类模块中声明新类型?

    excel - 如何创建输出一系列单元格内容的 Excel 函数