龙空技术网

VB的任性,从Variant开始

BtOfficer 1164

前言:

目前同学们对“vbnet数组最大值”大约比较重视,同学们都想要知道一些“vbnet数组最大值”的相关资讯。那么小编同时在网摘上汇集了一些关于“vbnet数组最大值””的相关内容,希望兄弟们能喜欢,同学们一起来学习一下吧!

不经意间,扮演了所有角色

前言

在《VB/VBA,请让我点名表扬你 》一文中指出,立身于教育的Kemeny和Kurtz教授,以其宽广的胸怀赋予BASIC和其继任者宽容的做派。这种宽容,造就了VB的任性。这种任性,塑造了VB的简单。但是,很多人享用完这种简单,开始会那么一拳两脚后,就觉得VB很Low,指责这也不行那也不好。本篇,就给大家伙儿拾掇拾掇,一起品品VB(含VB/VBA/VBS)的”LOW”。

一、VB的原野,处处都是Variant的小花

1、有种懒叫VB,你不懂!

不声明变量,就可随意而为,在其他强类型的语言里简直不可想象。但在VB里,就是这么随意,可以少敲键盘!这在遥远的BASIC时代,是先进。即便现在,也是洒脱。能写出潇洒的,大抵也只有VB了吧。

虽不推荐,但的确可以这么干!其实这背后,就是VB变量的隐式声明,用的类型正好就是Variant。一个变量名,可同时在VB支持的类型范围内,随意转换。Variant就像1个大容器,包揽所有类型。

2、开起我心爱的Excel, Variant轻轻地来了。

单元格放文本,放数字,还可放公式,哪里顺眼放哪里!点一点,拖一拖,都有回应。单元格的好使,将任性演绎淋淋尽致。在事件驱动下,将消息主导下的人机交互,雕刻的犹如身临其境。

这背后,正是Variant类型的功劳。Excel内部哪里没有Variant?单元格的Value属性,公式参数,事件参数,可以说有便捷的地方就有Variant,Variant就是便捷的垫脚石。

3、VBS的脚本,在ASP上挥洒自如。

VBS应该算是Variant的重病患者,在性能需求不高的交互页面上,各种姿态随你选。洋洋洒洒,能屈能伸,将VB的吊儿郎当玩耍的信手拈来

4、系统的基石里,Variant如影随形。

熟悉Shell32的朋友,肯定知道Application对象下的大部分参数都是Variant的,典型的当数ShellExecute方法。这只是系统中Variant现身的冰山一角,类似的案例非常多,读者朋友们可自行去探索。

我们知道,COM是Windows系统的基石,COM要想在二进制上跨语言,首要解决的就是兼容各大语言的变量类型。Variant当仁不让的站了出来,这也是VB身为COM语言的有力证据之一,同时也是VB值得深挖的佐证。

二、自古慈母多败儿,Variant驼背的宠爱,换来的却是声声怨恨。

1、Variant本身就告诉用户,便捷与性能不能兼得。

Excel数据处理,堪称巨坑,比起Python,速度简直不要太弱!不知受了什么启发,很多用户像发现了新大陆,昔日的土地仿佛充满了荆棘。于是像负气的孩子,奔走相告间,充满了怨恨。

VBA解释执行时,用不上后端优化器,你要Variant如何快起来。享受了方便,就不要抱怨Excel单元格遍历起来很慢,天下哪有两头都占的理!更何况,VB在嘻皮笑脸的背后,也有一本正经的严肃。

2、Variant本身就告诉用户,性能提升的办法多了去,只是不会送货上门。

单元格里Variant困扰,让很多试图采用数据库方式的人,屡屡受挫。于是,Excel表单不如数据库,Excel数据超过N行后就是垃圾,Excel数据分析不如Python,总之Excel亏欠人们很多。

孰不知,Variant也可以整整齐齐。虽然VBA用不上后端优化器,但Excel有数据类型扫描引擎啊!在该引擎的作用下,透视表的美简直不可方物。为何世人只看嬉笑怒骂的酸爽,却不扭头面壁思过,来一份踏实!

三、Variant的真身,竟然是通票

1、欲戴皇冠,必承其重。

Variant造就了VB的任性,也塑造了VB的易用性。但在VB轻描淡写之下,立在其身后的,却是一个长达16字节的庞然大物。很多人也正因为这个,觉得Variant类型比较费内存,运行起来肯定会比较慢,但事实远非如此简单。

这个16字节里,其实是一个结构体,这是VB众多隐身衣之一。翻译成VB的结构,大概是这个样子的:

Public Type Variant_

vt 'VARTYPE [2]指明Vars中有效成员,也即真实的数据类型

wReserved1 'WORD [2]系统保留

wReserved2 'WORD [2]系统保留

wReserved3 'WORD [2]系统保留

Var 'Vars [8]具体存储数据或数据地址

End Type

首成员指明Variant的真实数据类型,尾成员存储数据或数据指针(看指针开始显形了)。

2、有些事,竟只有Variant能够周旋。

Variant不仅在与系统COM组件交互时有用,对于深入VB而言,也是必经之路。它的尾成员,将VB的数据进一步划分为数据类型和指针类型,为我们揭开VB的层层伪装提供了入口。

成熟于32位时代的VB,在64位机器面前受尽嘲讽。缺乏LongLong类型也一直为不知所以然的人所津津乐道,偌大的Variant杵在面前,他们却视而不见。Variant里隐藏的Decimal,有这种洪荒之兽镇宅,拿捏宇宙都不是问题,一区区8字节却难倒诸多英雄好汉。再不然,还有字节数组啊,什么样的妖孽装不下?

四、善用Variant,方能通行无阻

1、Variant的任性与犀利并存,谁说Variant就慢了。

在Variant首尾两个成员的帮助下,VB的后端优化器,可以将该类型还原为真实的类型。所以,Variant的确费内存,但在编译后,与性能却没有多大关系。

同样在Excel中,扫描引擎会统计表的前几行的数据类型,来确定各列的数据类型。这为Excel表的数据库应用提供了基础,甚至无需代码,就可以利用SQL语句进行增删改查。跟数据库引擎比数据处理速度,谁闲得慌么!

2、Variant传参,妙笔生花。

Variant在VB中真正的妙笔,在于参数的传递。任何类型都可以传递给Variant,这为VB建造灵活且复杂的程序提供了极大的方便。

在VB中自定义结构体容易,但想要在函数中传递结构体,就没那么容易了。具体原因留给读者自己思考。此时,Variant大吼一声,让我来。意不意外?惊不惊喜?

在VB中ParamArray关键字,想必大家都很熟悉,给函数提供不确定个数的参数时,十分有用。但这货必须要求是Variant类型。如果结合Variant结构,则可以设计出非常巧妙的程序。后面要跟大家分享的函数指针就跟这儿有关。

五、性能好的,却不一定是适合的

对于VB而言,有Office这个无敌手的大前端在,让潜在的替代都显得黯然失色。所以,要想在Office的地界上风生水起,熟悉Office的操作是不可忽视的基础,否则闹出笑话就只能贻笑大方了。Office中随处可见的Variant,时时提醒着世人,不是任何地方都需要极致的性能,人机交互的便捷和高效性能的平衡,往往更重要。

<本篇作为VB内存管理系列的引子,后面会陆续分享变量、指针、句柄、消息等,是进入VB高阶开发前,必要的准备。欢迎大家持续关注!>

标签: #vbnet数组最大值 #vb多义线算法 #vb 键盘事件