VBA中DefVar是否存在合理的合法使用场景?
VBA里那“源自地狱”的Def[Type]语句
老玩VBA的伙计对Def[Type]语句估计都深恶痛绝,甚至戏称它是“源自地狱”的语法——它的核心作用就是强制一套系统匈牙利命名法,让变量、函数返回值的类型完全由名称开头的字母绑定。
先看个实际示例:
Option Explicit DefBool B DefLng I, L
这类语句会带来一堆藏在暗处的副作用,直接颠覆常规的变量声明逻辑:
- 写
Dim bSomething时,这个变量在编译阶段会被自动判定为布尔型(Boolean),就因为开头字母是B - 写
Dim iGiveUp时,会被自动判定为长整型(Long),谁让开头是I呢 - 写
Dim lNooooo时,同样会被自动判定为长整型(Long),只因为前缀L被DefLng指定了
更离谱的还在函数和属性上:
Public Function IsUseful() ' 这里没显式指定返回类型 ' 但就因为开头字母是I,编译时它的返回值会被默认设为长整型(Long) End Function
就连属性过程也逃不开这个规则:比如Public Property Get Ba…这类定义,只要开头字母匹配了Def[Type]指定的前缀,返回类型就会被强制设定,根本不需要你显式声明。
这种语法看似是想“简化”类型声明,但实际上把代码的可读性和可维护性拉到了谷底——新接手代码的人要是没注意到顶部的Def[Type]语句,很容易对变量类型产生误解,排查bug时更是要多绕好几个弯,说它是“地狱级”坑点真不冤枉。
内容的提问来源于stack exchange,提问作者Mathieu Guindon
相关产品推荐
相关产品推荐

