技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 97|回复: 3
收起左侧

【VFB】VisualFreeBasic:VisualBasic6望尘莫及之短路逻辑

[复制链接]

50

主题

78

帖子

635

积分

用户组: 大·技术宅

UID
3260
精华
7
威望
12 点
宅币
497 个
贡献
1 次
宅之契约
0 份
在线时间
22 小时
注册时间
2017-12-26
发表于 2020-1-18 17:47:30 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
VisualBasic6:微软出品、简单易用,虽然几十年前的,依旧生命顽强,以下简称:VB6

VisualFreeBasic:集合VB6的易用和采用c语言的优点及编程底层操作,VB6高手的进阶语言,以下简称:VFB


有种逻辑操作符叫:短路。顾名思义就是路径比较短,那换成代码执行就更高效率了。这是VB6不存在的。

正常逻辑是:And、Or
短路逻辑是:AndAlso、OrElse

本来VFB比VB6代码执行效率高很多,有了这个更能加速。例题:
[Visual Basic] 纯文本查看 复制代码
'平常写法
If 表达式a And 表达式b Then ok
'短路逻辑
If 表达式a AndAlso 表达式b Then ok
看上去一样,但实际上是不一样的,等效下面的语句
[Visual Basic] 纯文本查看 复制代码
If 表达式a Then
	If 表达式b Then  ok
End If
平常写法的特性:表达式a表达式b 必须都要在计算得出结果后再进行And方式的逻辑比较,才能判断出条件是否成立。
短路写法的特性:表达式a 如果不成立,那么 表达式b 就不需要再进行计算了——已经足以判断出条件不成立了。而如果 表达式a 成立,则依然要计算 表达式b 的结果。

最有说明的应用就是数组,判断是不是发生越界访问了:
[Visual Basic] 纯文本查看 复制代码
If UBound(BB) >= 5 AndAlso BB(5) > 0 Then
平常写法会因为数组太少而发生代码出错,短路写法则不会发生这问题。

上述例子用的是逻辑与的短路写法“AndAlso”,下面我们来介绍逻辑或的短路写法“OrElse”

平常写法的特性:所有表达式必须都要在计算得出结果后再进行Or方式的逻辑比较,才能判断出条件是否成立。
[Visual Basic] 纯文本查看 复制代码
If 表达式a Or 表达式b Or 表达式c Then ok
短路写法的特性:先计算 表达式a 的结果,成立就直接OK,不成立则按顺序接着计算 表达式b ,如果成立则同样OK;表达式a表达式b 如果都不成立,则计算 表达式c ,如果成立则OK,否则进入Else块或者结束。
[Visual Basic] 纯文本查看 复制代码
If 表达式a OrElse 表达式b OrElse 表达式c Then ok
以上只是冰山一角,更多发现,期待你自己使用VFB。


重新排版by @0xAA55
回复

使用道具 举报

1051

主题

2366

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
218
威望
294 点
宅币
18698 个
贡献
38686 次
宅之契约
0 份
在线时间
1788 小时
注册时间
2014-1-26
发表于 2020-1-19 20:47:32 | 显示全部楼层
这个AndAlso其实就是C语言的 && ,OrElse则是C语言的 || 。其实可以不必出现在Basic系语法里,因为编译器可以做到识别你的需求,然后避免进行后续的判断。

反过来,多了这个AndAlso、OrElse会让Basic语言变得啰嗦。这些地方,C语言使用运算符比较方便,比如 & 和 && 、| 和 ||的对比。但Basic大可不必走这一套。

不应该“你有我有”,要发挥各个语言各自的长处。就这一点,我更喜欢原生的VB6的语法,而不太喜欢VFB的语法。我感觉那还不如我写C呢。

50

主题

78

帖子

635

积分

用户组: 大·技术宅

UID
3260
精华
7
威望
12 点
宅币
497 个
贡献
1 次
宅之契约
0 份
在线时间
22 小时
注册时间
2017-12-26
 楼主| 发表于 2020-1-20 17:46:27 | 显示全部楼层
0xAA55 发表于 2020-1-19 20:47
这个AndAlso其实就是C语言的 && ,OrElse则是C语言的 || 。其实可以不必出现在Basic系语法里,因为编译器可 ...

凭什么 C语言里有就不叫啰嗦, B语言里有就叫啰嗦, C语言里的好处,B语言学习来用,有错吗?
有好东西我们要学来用,而不是放弃自己去用别的。

1051

主题

2366

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
218
威望
294 点
宅币
18698 个
贡献
38686 次
宅之契约
0 份
在线时间
1788 小时
注册时间
2014-1-26
发表于 2020-1-21 14:28:15 | 显示全部楼层
勇芳软件 发表于 2020-1-20 17:46
凭什么 C语言里有就不叫啰嗦, B语言里有就叫啰嗦, C语言里的好处,B语言学习来用,有错吗?
有好东西我 ...

1、我没说要放弃自己去用别的。Basic系可以做到让编译器自动识别逻辑与或非是按位还是按逻辑的,并且也可以在需要按逻辑处理的时候应用短路逻辑。

2、在C语言里面可以直接用符号表示的,在Basic里非要用单词表示,这不是啰嗦是什么?

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-2-28 20:48 , Processed in 0.095272 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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