欢迎光临散文网 会员登陆 & 注册

Visual Basic学习随笔

2023-07-25 18:11 作者:橘里橘气橘子花  | 我要投稿

首先说一下为什么要突击VB,因为最近出现了个很邪门的需求,需要我二次开发一下SolidWorks,之前查文档的时候发现Python是可以开发的,但是由于SW没有原生的Py接口,数据类型转换中还有一些问题,最后也是就放弃了Py的想法。而VB作为正经的SW推荐的二次开发语言,用起来要方便得多,所以简单的突击一下VB,方便自己后续做二次开发。这个文章主要是给自己记录一下VB的语法,方便自己查阅,同时如果你有编程基础,有一些需要快速突击的需求,那么也可以用我的文章做速查。

同时我想说一点,VB还是有不少毛病的,比如写法和JS一样随意,很多关键词创新了但没有完全创新,三方库也比较少。作为一个独立的开发语言其实不是很合格,所以如果你没有一定要使用VB的需求,那么我建议你别学了,学个C#绝对比VB强。

惯例先介绍一下VB1.0,这是微软搞出来的语言,这语言与一般认识中的不一样,出现的相当晚,1991年才出现,和现在正在火的Python是同年出现的语言。同样的,VB也是一个面向对象的语言。目前不少工业设计软件和微软自己的软件的插件开发基本都需要用到VB,比如ppt插件之类的。现在的VB和.NET绑定起来了,VB的编译器会直接编译出.NET下运行的程序,你的程序实际上是依赖.NET运行时的,然而C#显然能以更优良的语法写出同样依赖.NET运行时的程序,这也就是我说为啥不如学个C#的原因。

  1. VB的开发环境

    可以去微软官网看一下,VB最推荐的开发环境是Visual Studio,下载地址:https://visualstudio.microsoft.com/zh-hans/。我最开始尝试用VScode加插件,手动下载.NET SDK来进行编译,但是似乎很麻烦,我暂时也没跑起来,所以省事起见,直接下VS配置开发环境比较快。

下载好以后启动VS,新建一个项目:

选择VB控制台应用,带.NET的那个

下面填项目的名称,解决方案的名称,我理解的就是解决方案名称就是这个项目整个最外层的文件夹的名称,而项目名称是默认给你创建的模块的名称。

我原来没用过VS,一般都用的VScode,所以一进VS,就被默认字体惊到了,先改一下字体再说:

VScode默认的字体就是这个Lucida Console的加粗版,如果有更喜欢的字体搁这里面改就完事了。

2.语法

2.0.在哪写代码?

在VB中,程序的入口同样是Main()函数,因此在生成的模块中有一个Main()函数,程序从这里开始执行,代码应该写在这里。

2.1.变量

VB是弱类型语言,常见的类型关键词如下图:

到这里你发现了,VB所有关键词首字母都需要大写,好在VS贴心的帮你提供了自动转大写功能,所以你只需要敲它的小写然后让VS给你转大写即可。

如何声明一个变量呢?

这里也约定一下,后续尖括号里的内容代表你可以替换的内容,方括号的内容代表你可以省略的内容。在VB中,你定义变量时可以:

a)指定它的类型但不指定它的值,

b)既指定它的类型也指定它的值,

c)只指定它的值而不指定它的类型,此时编译器会帮你猜一个类型出来。

下面看一下代码:

2.2.输入输出

VB中输入输出各提供了两个函数,都由Console模块提供:

Read只接收下一个字符,返回值为整型,如果没接收到就是-1,而ReadLine会接收下一行的字符串。

Write打印结束后不会追加回车符,而WriteLine在打印结束后会追加回车符。

最后多加了个Read是为了阻止程序在结束后自动退出,没有其他意义。

2.3.判断

我直接贴个代码片段,然后再说:

其实已经一目了然了,就是:

elseif和else都可要可不要,但是一定要有if。由于没有花括号或者缩进用来表示语句块,因此VB需要End xx来表示上述语句块结束。

同时其实VB提供了一个三目运算符的替代函数,叫做IIf(),用法如下:

函数中第一个参数为布尔值,第二个参数为传入布尔值为True时的返回值,第三个参数为传入的布尔值为False时的返回值。它怎么实现的我不清楚,但是我现在可以实现一个相同功能的函数:

2.4.循环

VB提供了while和for循环,for的和C语言的不像,而是和Python的比较像。

for语句可以结合一个新的关键词to使用,用来生成从n到m次循环:

for结尾不用end for,而是next,这里需要注意下

此外for的经典用法就是枚举数组中的内容,数组下一节细说,这里先借用下:

for可以在每次循环把数组i中的下一个值给赋给num来使用。

2.5.数组

既然说到数组了,就提一下,VB中的数组声明和C很像,唯一差别就是C中是中括号,而VB中是小括号。此时As后跟的类型就是数组中元素的类型。只有两种情况:

a)只指定数组长度

b)只指定数组元素,此时编译器会自动计算数组长度

如果你想:

c)既指定数组元素也指定数组长度

那么就会报错,提示中也告诉你为啥了:

数组的使用没啥,就是通过下标可以访问或者修改:

这里要注意一件事,就是字符数组。根据我昨天一下午的测试,VB中的字符串和字符数组区别不大,字符串甚至可以隐式的与字符数组互相转换。同时两者中谁都能直接用索引,但是如果想调用字符串方法,如reverse,那么最好使用字符数组。

字符串可以用ToCharArray方法转为字符数组。

2.6.函数

其实默认的Sub关键字不能有返回值,称作函数有点牵强,官方管这个东西叫做子程序。它除了没有返回值,和函数基本一模一样。如果想要返回值,那么就应该用Function关键字声明函数。

没啥好说的,和其他语言的函数一个作用。

2.7.类

虽然我觉得我做二次开发基本用不到面向对象,但是还是大约记录一下,万一用到了呢

曾经我写过一个数学建模题,讲的是两个站点之间有n辆公交车,每辆公交车都最大只能带走m个人,公交车在两个站点之间的速度是k,站点A和站点B不同时段的人数不同,让你规划一个公交车的时刻表,既可以将所有人都拉走,同时要保证公交车空下的座位最少。具体的数字我已经记不清了。这个题不出意外的话应该是有纯数学的解析解的。但是从面向对象的思路考虑,那就应该是把这n辆公交车和这2个站点都当作对象,每个公交车都有属于自己的m个座位,以及自己当前距离某个站点的距离和朝向。同时站点只负责维护两个关于公交车和候车人数的属性即可。在时间允许的情况下,两个站点放入不同数量的公交车,将当天的所有公交车的线路仿真出来即可找到最优解。

我个人觉得面向对象的优点是看得清楚,如果没有对象的概念,那么很多数据就会搅在一起,当代码数量变长时再修改就会非常困难,因为你找不到当时设计的是哪个,而面向对象不关心把所有从一个模子刻出来的势力,仅仅关注这个模具合不合适。

在类中想要声明一个新属性就使用

如果声明方法那就和写一个函数没区别。

这里举个例子,我老举这个例子:

定义一个Dog类,这个类只有两个属性,一个是名字,一个是体重,而这个类只有两个方法,一个是吃,吃了以后体重会加0.1,而另一个类则是检查体重。

那么下面需要在主函数使用这个Dog类:

首先先要定义一个变量,这个变量的类型就是类名,然后new一个新的类给这个变量,就创建好了一个独立的,不受影响的实例了。

这个程序使用MyDog类创建了两只狗,一只叫oran,一只叫flo,而第一只狗调用10次吃的方法,第二只狗只调用一次,随后再检查两只狗的体重,发现oran的体重为11,而flo的体重为10.1,也就是说两只狗虽然调用的一模一样的方法,但是它们两个的属性全部是独立的。因此对某一个类调用方法是不会影响到其它类的,这样就保证了类内的数据安全。

Visual Basic学习随笔的评论 (共 条)

分享到微博请遵守国家法律