ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: joforn

[讨论] 关于变量声明的讨论

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-3 11:40 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据类型和基本语句
本帖最后由 joforn 于 2013-2-3 11:41 编辑
香川群子 发表于 2013-2-3 11:32
【变量的名称尽量使用英文。比如,我经常这样写 Dim LastRow As Long(意思是 Last Row,最后一行。不用添加 ...

对于你的这个观点,我还是直接用一楼的原话给你回答吧:
      那么,变量声明是必须么?我的回答是否定的,但如果你认为声明一个变量对你没什么损失的话,我仍旧建议你使用变量声明,这个并不是为让你的程序更好,而仅仅是为是在你的程序出问题时更快的找到问题所在(实际提升的速度还得看个人的经验,便一般来说,对于5000行以上的代码可能会快很多,如果说你所有代码都能保证在100行以内,用不用都差不多)。
      变量声明使用一定的规则有什么用?有很多人用如匈牙利命名法则之类的,这样用对于个人来说,说实话这样做对作者本人没有什么很大的意义。但是如果多人合作编写代码时就会体现出这类命名规则的优势。说白了,就是为了让别人能更快的看懂你的代码,对于作者本人用处并不大。如果说你想让你的代码变得“神鬼莫测”,那么你只要反其道而行即可,这样,就是别人得到你的代码,可能也会看着头晕眼花。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:43 | 显示全部楼层
应该围绕主题来讨论,不要偏移中心,1楼的论点没错,
我的回答到此为止。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:44 | 显示全部楼层
akendy 发表于 2013-2-3 11:38
这个事情我遇到过,最开始都不进行定义,后面看到说变量还是要定义一下的好,所以定义了。
结果就是出错 ...

你说得很对,变量是否要求显式声明,和定义变量时是否使用了恰当的数据类型完全是两回事,不过有人混杂到一起了。
即便完全使用变体类型,强制显式定义变量任然是好处多多。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:51 | 显示全部楼层
{:soso_e113:}不懂VBA,不过我知道这个帖子你们不管是正方还是反方,说到下一次世界末日都不可能说服对方的{:soso_e113:},快过年,好好打麻将斗地主,吃大餐,出去玩。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:51 | 显示全部楼层
本帖最后由 lee1892 于 2013-2-3 11:59 编辑
香川群子 发表于 2013-2-3 11:32
【变量的名称尽量使用英文。比如,我经常这样写 Dim LastRow As Long(意思是 Last Row,最后一行。不用添加 ...
当然,既然说的是非正规编程,那么个人习惯怎么来都行。

我很欣喜的看到和你原贴的态度比,经过众多好心人不厌其烦的帮助,现在的态度已经出现了可喜的变化。

作为对比,原贴是这样的~
彻底打倒学术权霸的形成的错误概念 → 【定义变量和定义变量类型是个好习惯】
既然实际使用没有差别,为什么还要用这句Option Explicit代码呢? 除非脑袋被驴踢了!
因此,建议初学者忽视任何老师关于学习VBA时应该学习定义变量类型,或者定义变量类型是一个编程好习惯的荒唐说法。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
变量的显式定义是非常重要的。
首先,变量的定义位置决定了变量的作用域和生存周期。从阅读代码的角度来说,没有显式定义,就不便于确定变量的定义位置,进而不便于了解变量的作用域和生存周期。比如
[code=vb]Sub SomeMethod
        '……
        a=10
        '……
End Sub[/code]
无法轻易判断a是定义在过程内的局部变量还是定义在过程外的字段或全局变量。并且,使用注释来描述这些信息是不合适的,因为这本属于变量定义应该描述的内容。

从书写代码的角度来说,不显式声明变量,容易意外地修改字段或全局变量。同样以上面的代码举例,如果a是在工程某个角落定义的全局变量,那么上面的代码就不是引入一个局部变量,而是错误地修改了全局变量的值。这会导致一些难以发觉和调试的错误。(当然,由于全局变量作用域过大,生存期过长,一般不推荐使用。)


其次,强制变量显式定义,可以有效地杜绝意外标识符。
一般说来,编译器会将无法解析的标识符以编译错误处理。但是允许变量隐式声明后,这些本应该被编译器揪出来的未定义标识符在满足语法的情况下会被认为是隐式声明的变量。VB6的ide对函数名、类型名、成员名有智能提示,写错的概率要小一些,但是并没有对局部变量的智能提示。
输入错误是任何人都可能发生的,就算熟知某个单词如何拼写,实际录入的时候照样可能一不小心出错。

上面说的这些都与变量的数据类型无关。不懂数据类型不能成为不显式定义变量的理由,这二者完全是两回事。变量显式定义需要的开销无非是多打几个字母,对新手来说根本没什么困难。

vb6提供了变量隐式声明的功能,这增加了代码的自由性,但是很多时候越自由的东西越难以掌握。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-2-3 12:06 | 显示全部楼层
joforn 发表于 2013-2-3 11:25
其实我想讨论的是几个问题:
第一,变量先声明后使用真的有部分人说的那样难么?
第二,变量先声明后使用 ...

我虽是初学VBA一个多月,但我也想想说说自己的观点。

现在这个贴的讨论已经偏题了,而且楼主的意思也不是太明确:变量声明并不代表一定要声明变量的类型
比如可以直接声明: dim x

两边讨论的人都忽略了这个很重要的一个中间状态。
个人来说,现在使用这种中间状态会方便一点,偶尔有时会加上类型的声明。

而且我在学的时候也开始有意识的进行规范一些东西,比如代码的缩进等,这些可以方便查看代码。


规范的东西肯定是有好处的,但也会带来一些难处,这也是肯定的。
任何事情都是有两面性的,没有什么是有百利无一害的事情。
存在的就是合理的,也有其存在的必然性。

其实楼主这一派和香川群子这一派的意思并不是完全对立的,为什么一定要把对方说到自己对立面去呢?

大家都说说自己的观点,别吵架就好,更何况两边的观点并不是对立的,所以没必要纠住对方一个表述错误就死批,呵呵

新人说的话,如果觉得不对,各位大侠就略过吧。

点评

你的观点很中肯。不过有一点,我明确一下:我不属任何派,我也没有找人吵架的爱好。  发表于 2013-2-3 12:12

TA的精华主题

TA的得分主题

发表于 2013-2-3 12:22 | 显示全部楼层
现在1楼的观点已经没有什么错误了。 可以申请加精、推荐了。


同时,我认为,既然可以设置为不用强制申明变量就可以写出代码并正确运行,
那么这种做法在一定的条件下(初学者、临时性使用、个人使用,小型代码等)那就完全没有问题。



TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-3 12:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 joforn 于 2013-2-3 12:40 编辑
香川群子 发表于 2013-2-3 12:22
现在1楼的观点已经没有什么错误了。 可以申请加精、推荐了。

估计你刚开始时就没看我一楼发的具体内容吧,或是只是匆匆扫了一眼?
虽然一楼的帖子我今天编辑过,但是我只是把第三条加粗了,然后再加了补充说明那一段。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-3 12:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2013-2-3 12:22
现在1楼的观点已经没有什么错误了。 可以申请加精、推荐了。

如果你认为我发个帖就是想吸引一下眼球,或是混个精华什么的,那我只能告诉你:对不起,你想错了。
说句大话:如果我想混精华的话,只要我去弄,在一年内弄上十个精华帖还是问题不大的。

点评

事实上是南宫有才  发表于 2013-2-5 21:03

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-19 03:26 , Processed in 0.043966 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表