技术宅的结界

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

QQ登录

只需一步,快速开始

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

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

[复制链接]

51

主题

80

帖子

642

积分

用户组: 大·技术宅

UID
3260
精华
7
威望
12 点
宅币
502 个
贡献
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
回复

使用道具 举报

1068

主题

2473

帖子

6万

积分

用户组: 管理员

一只技术宅

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

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

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

51

主题

80

帖子

642

积分

用户组: 大·技术宅

UID
3260
精华
7
威望
12 点
宅币
502 个
贡献
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语言学习来用,有错吗?
有好东西我们要学来用,而不是放弃自己去用别的。

1068

主题

2473

帖子

6万

积分

用户组: 管理员

一只技术宅

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

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

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

1

主题

17

帖子

131

积分

用户组: 小·技术宅

UID
5585
精华
1
威望
7 点
宅币
95 个
贡献
0 次
宅之契约
0 份
在线时间
12 小时
注册时间
2020-2-5
发表于 2020-3-17 20:20:11 | 显示全部楼层
对于FreeBasic感觉还行,但名字取的真不厚道,明明就是有着BASIC关键字的C语言。叫B语言还凑合,BASIC是给初学者用的,它真的配不上。

51

主题

80

帖子

642

积分

用户组: 大·技术宅

UID
3260
精华
7
威望
12 点
宅币
502 个
贡献
1 次
宅之契约
0 份
在线时间
22 小时
注册时间
2017-12-26
 楼主| 发表于 2020-3-19 22:06:14 | 显示全部楼层
smitest 发表于 2020-3-17 20:20
对于FreeBasic感觉还行,但名字取的真不厚道,明明就是有着BASIC关键字的C语言。叫B语言还凑合,BASIC是给 ...

【BASIC是给初学者用的】这句我不认同,我认为是易用,而非初级。应该是容易学习,适合人类思维(相对于C语言)C语言是纯粹为编程而生的语言,处处为电脑内部原理考虑,因此对初学来说就是个天书,B语言是人性化多了,处处为人考虑。 以前 VB 比较弱,给人带来了初级的印象,而 FB 就不同。

28

主题

185

帖子

2129

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1644 个
贡献
136 次
宅之契约
0 份
在线时间
350 小时
注册时间
2016-7-12
发表于 2020-3-19 22:27:20 | 显示全部楼层
勇芳软件 发表于 2020-3-19 22:06
【BASIC是给初学者用的】这句我不认同,我认为是易用,而非初级。应该是容易学习,适合人类思维(相对于C ...

Basic偏向数学逻辑,c语言偏向程序逻辑

28

主题

185

帖子

2129

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1644 个
贡献
136 次
宅之契约
0 份
在线时间
350 小时
注册时间
2016-7-12
发表于 2020-3-19 22:28:41 | 显示全部楼层
smitest 发表于 2020-3-17 20:20
对于FreeBasic感觉还行,但名字取的真不厚道,明明就是有着BASIC关键字的C语言。叫B语言还凑合,BASIC是给 ...

basic作为快速开发和数学演示上还是很人性化的。

本版积分规则

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

GMT+8, 2020-10-25 07:53 , Processed in 0.102930 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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