前言
前些天一个朋友问我,他在写脚本的时候遇到号码被重复使用的问题,有没有办法解决。
解决重复的问题,最常见的方式就是记录+比较。
记录:用过的内容全部记录下来
比较:“新”的内容,在用之前先和记录的内容作比较,确定一下它到底是不是新的。
解决思路就是这些,不过好像和我们这期文章标题没啥关系,文章标题是关于函数封装的。
为啥把它们联系在一起,我在解决开头说的问题时,写完代码后顺势就封装成了一个函数。
不知道从什么时候开始,我很喜欢把特定功能块封装成函数,因为封装函数有几个好处:
①精简代码,重复使用的代码,封装成函数后,执行时只需调用一行调用函数的代码。
②代码功能介绍,让人知道这堆代码是干啥用的,好多人就是当注释来用的,这一点我想当不认可。
③方便维护,这一点写脚本的人很少考虑,因为大多人都是单打独斗,一个脚本从头到尾都是自己完成,不需要和别人合作,写的怎么样其实没那么重要,只要想要的功能能完成,自己的看得懂就可以。
我开始频繁使用函数,可能就是意识到方便维护这一点,我写函数有几点注意的地方:
①函数要带有参数
函数内部的代码,如果有常量都可以作为函数的参数,有参数可以让函数试用范围更广泛,举个例子:
functionFunction 加法()
TracePrint 1+1
End Function
Function 加法(m,n)
TracePrint m+n
End Function
同样都是加法函数,第一个加法函数只能算1+1,第二个加法函数就可以算任意两个数相加。
②函数要有返回值
返回值的目的是让脚本知道函数有没有运行?运行的怎么样?也就是做事有反馈,还是加法的函数
TracePrint 加法(1,1)
Function 加法(m,n)
TracePrint m+n
End Function
TracePrint 加法(1,1)
Function 加法(m,n)
加法= m+n
End Function
函数的返回值,就是在函数内部加上一行代码:
函数名=XXX
那么函数就会返回XXX这个内容,也就是所说的返回值。
例子中这种有具体数值的可能很多人都会写返回值,但是有些没有数值,就是具体某些操作功能,可能就不写返回值了。
像这种情况,我们可以写true和false这种布尔值作为返回值。
完成的好写true,完成的不好写false。
③函数封装的代码(功能)太多,完成一个小功能就行
好多人会把几百上千甚至更多行代码封装函数,这种写法就是我说的把函数当注释使用了。
我们封装的函数虽然不限制函数,但是尽量完成小的功能,所以函数内部的代码行一般不会太多。
如果想要封装比较复杂功能的函数,也是封装框架,然后具体功能是通过调用别的函数实现。
这里注意:函数里面是可以调用函数的,不要啥都写在函数里面。
④函数要具有一定的通用性
就是说你定义一个函数在代码中只能用一次,这种其实就没必要封装函数了。
⑤函数具有稳定性
稳定性不光在函数中,其实脚本也要有稳定性,不能动不动就停了。
影响稳定性的因素主要是突发状况,我在写函数或者脚本的时候要优先考虑突发状况。
我能想到的就是这些~
下面看一下文章开头那个重复号码问题的解决代码:
Dim str="a1234s6"
If Dif(str) Then
TracePrint "重复了"
Else
TracePrint "不重复"
End If
Function Dif(str)
Dim path="/sdcard/pictures/记录.txt"
If Dir.Exist(path) = 0 Then
Dif = false
file.Write path, str
Else
Dim arr=file.readlines(path)
For i = 1 To Len(arr)
If arr[i] = str Then
Dif=true
Exit For
End If
If i = Len(arr) Then
Dif = false
file.Append(path,str&"\n")
End If
Next
End If
End Function
关于上面函数代码的一些解释:
记录使用的是一个文本,内容比较是通过读取文本存入数组后,遍历数组内容,逐个和新号码比较。
在代码中为了能够稳定运行,加了一个判断记录文本是否存在的判断。
函数有参数有返回值,封装的函数后相当于一个命令,具有一定的通用性。
总结:
封装了函数以后当出现问题或者升级功能,可以直接修改指定的函数。
=正文完=
本文暂时没有评论,来添加一个吧(●'◡'●)