首先欢迎众多的朋友来我这个平台,或是学习,或者提出问题,我都欢迎。为了更好的和大家交流,分享知识,我会不定期的集合朋友提出的各种问题,选择其中有代表性的做一期专题,给大家以解答。所以,以后大家问题尽管提,很可能下期就有你提出的问题解答了。当然,由于篇幅有限,不可能面面俱到,没有照顾到的朋友还请谅解。
这期专题共解答有三个问题:
问题一:如果程序中所有变量,都不事先定义,有什么不好?(VBA)
问题二:公司如何从中选拔出年龄小于或者等于30岁,或者业绩大于或者等于万的人员(EXCEL函数)
问题三:A列姓名,B列日期,C列当月工资,求所有人分年度工资(-年)
下面逐一解答:
问题一:如果程序中所有变量,都不事先定义,有什么不好?(VBA)
对于这个问题,我先要解释4个概念:动态语言、静态语言;动态类型语言、静态类型语言,这几个概念对于初接触程序语言的朋友来说,很是费解。下面看我的介绍:
1、动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时,代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
2、静态语言
与动态语言相对对应,运行时结构不可变的语言就是静态语言。如Java、C、C++。
3、动态类型语言(DynamicallyTypedLanguage)
动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。
4、静态类型语言(StaticallyTypedLanguage)
静态语言的数据类型是在编译期间(或运行)之前确定的,编写代码的时候要明确确定变量的数据类型。主要语言:C、C++、C#、Java、Object-C。
由上面的讲解可以知道,动态类型语言和动态语言是完全不同的两个概念。动态类型语言,是指在运行期间才去做数据类型检查的语言,说的是数据类型;动态语言,说的是运行是改变结构,是代码结构。
静态类型语言的优缺点:
优点:其结构非常规范,便于调试,方便类型安全;
缺点:为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。
动态类型语言的优缺点:
有点:在于方便阅读,不需要写非常多的类型相关的代码;
缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。
很显然VBA是属于静态语言的范畴,其变量时需要定义的,但他的语言类型中有个类型是变体型数据,符号Variant,变体型数据是一种特殊的数据类型,几乎可以用于保存所有其它数据类型的数据。可以简单地理解为:当不知道变量所要表示的数据是什么类型时,就把它定义为Variant。对于数字,此类型数据占位16字节,可以存储DOUBLE范围内任何值;对于文本占位22字节。
那么是不是我们在写程序的时候可以不事先定义就可以呢?或者直接全部定义成Variant就可以呢?
首先,在上述的分析中知道,VB是静态类型语言的范畴,变量理应事先定义。
其次如果在使用过程中没有事先定义数据类型,变量将定义为Variant类型,而此类型占用的空间较大(16或22字节),这将影响程序的性能。如:整型Integer,占用两个字节;长整型Long,占用4个字节;单精度浮点型Single,占用4个字节;双精度浮点型Double,占用8个字节.要远比Variant类型的数据占用的内存少。
第三,对于数组,必须要定义范围数组界标的范围,否则程序会报错。
第四,事先声明变量的好处:、
1可以加速过程的执行。因为VB知道了数据的类型,就会根据数据类型来安排存储所需要的内存。
2可以使你的代码可理解性增加,因为每个变量都列在了过程的前面。
3可以预防由于变量拼写错误而导致的错误。VB会根据声明变量的拼写来自动更正变量的名称
4如果VB不知道你的数据类型,那么分配给变量的是Variant数据类型,占用的内存会增加,影响程序的运行速度。
问题二:公司想从中选拔出年龄小于或者等于30岁,或者业绩大于或者等于万的人员(EXCEL函数)
这个问题不做过多的讲解,请参考下面的截图公式,常看我文章的朋友很容易会理解:
问题三:A列姓名,B列日期,C列当月工资,求所有人分年度工资(-年)
此问题没有清楚的表达要解决的问题的条件,暂不做解答。请读者朋友提问时要写清自己的问题。
好了,三个问题回答完毕。
今日内容回向:
1,什么是静态类型语言,什么是动态类型语言。
2,静态语言和静态类型语言是否一样?
3VBA属于哪类语言的范畴?
4在写VBA程序时是否可以事先不定义数据类型