注册
登录
论坛
搜索
帮助
导航
私人消息 (0)
公共消息 (0)
论坛任务 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
批处理之家
»
BAT教程&资料
» 浅谈提高批处理代码效率的编写习惯
[新手上路]
批处理新手入门导读
[视频教程]
批处理基础视频教程
[视频教程]
VBS基础视频教程
[批处理精品]
批处理版照片整理器
[批处理精品]
纯批处理备份&还原驱动
[批处理精品]
CMD命令50条不能说的秘密
[在线下载]
第三方命令行工具
[在线帮助]
VBScript / JScript 在线参考
返回列表
发帖
cjiabing
发短消息
加为好友
cjiabing
(甲兵时代)
当前离线
UID
7853
帖子
1726
精华
2
积分
4476
PB
4191
技术
95
捐助
0
阅读权限
254
在线时间
1303 小时
注册时间
2008-12-21
最后登录
2018-10-23
荣誉版主
帖子
1726
积分
4476
技术
95
捐助
0
注册时间
2008-12-21
1
楼
跳转到
»
发表于 2011-9-6 20:43
|
显示全部帖子
既然从贴吧转发过来了,我也把我的评论转发过来:
我想谈谈Goto并纠正一些错误的观点。
作者所谈及的“少用 call 和 goto”,call我就不说了,在必要的时候还得用,不必要的地方影响效率。至于goto,我认为楼主没有在标题注明在什么情况下少用goto,以及内容中没有解释清楚为什么少用goto。最主要的一个失误就是,“少用 call 和 goto”这个标题误导了许多人,使得人们以为goto是多么的不好,能不用尽量不用。
如楼主提供的例子,例子中用goto肯定不如用for。但这只是一个方面。像“set /p var=&if %var%==yes goto end”这种没有goto不方便,用FOR多此一举。因此,楼主仅仅以FOR代替GOTO这单方面的原因来否定GOTO,以此强调少用GOTO是有欠严谨的,有点以偏概全。
楼主虽然用了“少用”二字,但从影响结果而言,以及从其他地方了解的情况来看,这个“少用”二字并未能消除人们对GOTO命令的偏见。内容比较具体,但标题有点夸大了。因此,我希望楼主在讲解这方面的内容时,能够从GOTO本身意义和效率来谈,解释清楚是何种条件下“少用 call 和 goto”,而不能胡乱一句话就搪塞完了。
2011-09-03 01:42 回复
cjiabing
10位粉丝 24楼
另外再谈谈Call与Goto的区别。
两者都可以跳转,但Call功能更多,而Goto比较单调。最明显的区别在于,Call有去有回,而Goto有去无回。具体原因我不是很明了,但Call在执行跳出去的时候,已经做了一个标记,用于遇到goto :eof时找到返回的位置。因此,Call在时间(命令执行先后顺序)上多了一个操作,这个操作在多层Call中是很明显的,Call从原位置跳出去了,他仍然时刻想着跳回去。这个原理使得Call可能占据了更多空间环境。而Goto则比较简单,他跳出去了就不用考虑往回跳,省去了这个标记和返回的过程。
一直想谈谈如何中止FOR的循环,楼主例二提供了两个很好的例子。FOR+Call,因为CALL的特性,使得可以确保FOR进程的前提下,获得对FOR进程的更好的干预。FOR+Goto,因为Goto不具有CALL的特性,GOTO无法嵌到FOR当中,因此,只能等FOR预处理完了才能GOTO。
在FOR中,CALL可以跳出FOR循环外,并能够在遇到GOTO :EOF时返回FOR中,继续FOR的进程。但GOTO只能跳出循环外,而不能返回FOR当中。
受两者命令自身特性的影响,它们在FOR中有着各自不同的用法。GOTO必须等FOR预处理完才能执行,而CALL可以在预处理的同时执行,但是,CALL也有一个缺点,就是它必须做一个用于返回的标记,这个有点类似于环境变量延迟,因此,有时候CALL外部命令时,它的效率也是十分差的。特别是在FOR中进行多个CALL时,它的效率会明显地下降。
因此,在大循环中避免使用GOTO只能当做一条不是很充分的条件,在许多情况下可以避免使用,但不是不能使用。还是那句话,在该使用GOTO的时候还是需要使用GOTO,在该使用CALL的时候还是需要使用CALL。灵活地熟练地应用两者才能在FOR中,在批处理中获得更大的发展空间。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。
TOP
cjiabing
发短消息
加为好友
cjiabing
(甲兵时代)
当前离线
UID
7853
帖子
1726
精华
2
积分
4476
PB
4191
技术
95
捐助
0
阅读权限
254
在线时间
1303 小时
注册时间
2008-12-21
最后登录
2018-10-23
荣誉版主
帖子
1726
积分
4476
技术
95
捐助
0
注册时间
2008-12-21
2
楼
发表于 2011-9-7 00:09
|
显示全部帖子
回复
8#
plp626
感觉他说的话就是真理,没办法啊。还要再做多方面验证,不过许多都是很有价值的。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。
TOP
返回列表
第三方命令行
BAT转载代码
开源原创工具
VBS原创&转载
出题挑战
有偿求助
新手练功
意见反馈
Python
UNIX/Linux Shell
批处理专区: BAT CMD DOS
BAT求助&讨论
BAT教程&资料
BAT原创&转载
BAT新大陆
BAT转载代码
新手练功
出题挑战
有偿求助
第三方命令行
开源原创工具
iBAT
Take Command
其他脚本区
PowerShell求助&讨论
PowerShell教程&资料
PowerShell原创&转载
VBS求助&讨论
JS / JScript / JavaScript
VBS教程&资料
VBS原创&转载
UNIX/Linux Shell
Python
Perl
网络资源区
电脑技术研讨
精品软件交流
论坛事务区
站务交流
意见反馈
论坛公告
版主申请
交换链接
建站杂谈
活动专区
论坛总版规
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]