使用子例程而不是函数进行输出



在这一点上,我认为函数和子例程的作用对我来说非常清楚。但现在我不太确定...我一直看到它写

"函数可以返回值/子例程不能返回值。">

"一个函数只能返回一个值"(我意识到他们也可以返回数组等(。

但是,如果我将"result"变量传递到子例程中,似乎我可以有效地"从子例程返回值"......这被认为是一种"糟糕的做法"吗?还是我在这里错过了一些其他关键概念......

方法 # 1(使用函数(:

Sub test1()
Dim x As Integer
Dim y As Integer
Dim z As Integer
x = 2
y = 3
z = test2(x, y)
End Sub
Function test2(var1 As Integer, var2 As Integer) As Integer
test2 = var1 + var2
End Function

方法 # 2(使用子例程(:

Sub test3()
Dim x As Integer
Dim y As Integer
Dim z As Integer
Call test4(x, y, z)
End Sub
Sub test4(var1 As Integer, var2 As Integer, var3 As Integer)
var1 = 2
var2 = 3
var3 = var1 + var2
End Sub

通常,更改参数的值是一种不好的做法。看看你的例子 - 很明显,你的函数对 2 个参数做了一些事情并返回一个值(你写给z(。在第二个示例中,除非查看子例程,否则您看不到会发生什么 - 不仅是函数定义,您还需要阅读完整的代码,以便您可以知道哪些参数将作,哪些参数不会作。

在软件开发中,当你调用一个子例程时,你不想看这个子例程 - 通常它甚至对你不可用。让子例程完成它的工作,但没有任何副作用。

尽可能使用函数,它可以使您的代码更具可读性。相信我。。。

在极少数情况下,您希望从子例程接收多个结果。在这种情况下,我建议将关键字ByRef明确放在参数前面(即使在 VBA 中,这在技术上不是必需的,因为它是默认值(。并发表评论,说明为什么会这样。几周、几个月或几年后,当你看到你的代码时,你会感谢自己。

最新更新