大家好,我是公众号3分钟学堂的郭立员,今天来说一说写脚本的一些不好习惯。
首先声明一下,这里所说的内容仅仅是不好的习惯,并不是错误,而且我说的也不一定全对,仅供大家参考。
(1)代码中有很多空行
从语法上说没有问题的,但是从编写习惯来说并不太好,因为有大量的无用空行会让代码行数增加很多,并且代码看着不连贯。
(2)代码缺少层级缩进
在代码中如果有首尾标签的命令,它内部的代码就比它低一层级。低层级的代码会向右移动一个空位。
缩进可以很容易看到层级关系,当代码中有大量层级的时候,如果不缩进,就有可能导致层级错乱,有了明确的层级缩进关系,就容易找到同一层级的开始和结束位置。
我们在写代码的时候,不需要刻意的通过空格或者table去区分层级,只需要写好代码后按一下F4键,按键会帮我们自动分级。
(3)定义变量名过于随意
我平时写代码的时候,习惯这样定义变量
dim m
这么写没语法错误,但是从代码规范角度来说是有“问题”的,因为这行代码写完别人并不知道m这个变量是做什么的,所以我们定义变量名时最好是起一些有实际意义的名称。
dim 行号dim hanghaodim line
变量名可以是中文、英文或者是拼音,大家通过名称就可以大概猜到这个变量是做什么的。
(4)代码缺少必要的注释
关于代码注释,其实对于写脚本来说并不是必须的,你可以写也可以不写,都不影响代码的正常运行。
之所以会想到代码注释这个问题,是因为前段时间我打包卖200个源码,这些代码当中有些内容,如果我不去注释,别人可能看不懂。
其实我们写注释的目的就是为了别人能看懂代码,或者自己过了很久后台看代码能够知道代码是做什么用。
不过好在写脚本通常是单打独斗,不需要团队协作写代码,所以自己看得懂的话问题也不到。
(5)随意定义函数/子程序
这个习惯常出现在新手刚刚学会定义函数/子程序的时候,遇到什么小的功能就想封装一个函数。
之后就是调用函数,他可能觉得一大堆代码一打包成函数就是缩小了,用时就可以调用,还是给这段代码起个名字,知道代码是什么功能,看上去挺好的,一举两得。
函数的主要作用是节省代码,并不是非用不可的,即便你的代码中没有一个函数也是可以的。
那么节省代码的方式是什么呢,比方说有100行代码,在整个脚本中出现在5处位置,那么这部分代码总量就是100*5=500行代码,如果我们把100行代码封装函数,之后在5出位置调用,那么代码总数就是封装函数102行代码,5个位置分别用1行代码调用函数是5行代码,一共是107行代码。
如果你定义函数并不能起到节省代码的作用,那么没必要定义函数了。
(6)函数定义写在代码行间
这也是一个因为过于随意产生的问题,就是想要定义一个函数,就直接写了,也不管它在什么位置。
比方说下面的代码:
TracePrint "调试输出内容"call 定义函数()Function 定义函数() TracePrint "定义函数"End FunctionTracePrint "调试输出内容"
定义的函数穿插在代码行间,这种如果遇到整体需要循环的的时候就会报错。
for 5TracePrint "调试输出内容"call 定义函数()Function 定义函数() TracePrint "定义函数"End FunctionTracePrint "调试输出内容"next
看上去是for循环的报错提示,其实是因为function命令是不能放到任何双标签的命令之中。
常见双标签命令:for循环、do循环、if判断、function本身,sub子程序。
(7)函数中调用全局变量
Dim a=5Call 函数()Function 函数() TracePrint aEnd Function
这段代码就是把全局变量a,在函数中调用了,为啥不要这样使用呢,是因为,全局变量是整个代码都有效的,如果变量内容被其他命令修改了,函数在调用就可能会错误了。
正常使用的话是这样:
Call 函数()Function 函数() Dim a=5 TracePrint aEnd Function
函数中的变量要在函数内定义,这种定义的变量叫局部变量,它只在函数内有效,函数外面是调用不了的。
(8)多个函数之间的传递数据用参数和返回值,而不是用全局变量
函数返回值:在函数内,函数名等于的值就是返回值,在函数运行完,就会返回这个值。
TracePrint 函数1()Function 函数1() Dim a=5 Dim b=2 函数1=a*bEnd Function
函数的参数:
TracePrint 函数1(5,2)Function 函数1(a,b) 函数1=a*bEnd Function
原本a和b是定义的局部变量,把a和b写在括号里面,在调用函数的时候,把他们的值5和2填上,这个a和b就是函数的参数。
相对于dim a,b来说,参数a,b是可变的,每次调用函数可以添加不同的值,而直接dim定义就是固定的。
了解完返回值和参数以后,说一下很多新手朋友关于多个函数之间传递数据会犯的错误。
Dim aCall 函数1()Call 函数2()Function 函数1() a=3*5End FunctionFunction 函数2() dim b = a * 3 TracePrint bEnd Function
用全局变量在多函数之间传递数据,这种方式语法可行,但是当数据多了以后,保不齐就会出现传递失败或者传递错误数据。
那么可靠的写法是这样的:
Dim a=函数1()TracePrint 函数2(a)Function 函数1() 函数1=3*5End FunctionFunction 函数2(参数) 函数2 = 参数 * 3End Function
如果数据从函数1传递到函数2,函数1可以把要传递的数据当做返回值,函数2把函数1的返回值当做参数,这样数据就从函数1传递到函数2了。
我们写代码的中很多小细节,大家写的时候要多留意,另外多看看别人写的代码,吸取别人的优点。
好了本期内容就这些。