使用子程序而不是函数进行输出
Using Subroutine for output instead of a function
此时我认为函数和子程序的作用对我来说已经很清楚了。不过现在不太确定了。。。一直看到写的
"Functions can return values / subroutines cannot return a value."
和
"a function can only return a single value"(我意识到他们也可以 return 数组等等)。
但如果我将 "result" 变量传递给子例程,我似乎可以有效地 "return a value from a subroutine"...这是否被视为 "poor practice?" 或我是否遗漏了其他一些关键这里的概念...
方法#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 个参数和 returns 一个值(你写到 z
)做了一些事情。在第二个示例中,除非您查看子例程,否则您看不到会发生什么 - 不仅是函数定义,您还需要阅读完整的代码,以便您可以判断哪些参数将被操作,哪些不会。
在软件开发中,当你调用一个子程序时,你不想看这个子程序——甚至经常是你看不到它。让子例程完成它的工作,但没有任何副作用。
Use a function whenever possible, it keeps your code much more readable. Trust me...
在(极少数)情况下,您希望从一个子例程中接收多个结果。在那种情况下,我建议在参数前面明确放置关键字 ByRef
(即使在 VBA 中这在技术上是不必要的,因为它是默认设置)。并发表评论说明为什么会这样。当您在数周、数月或数年后查看您的代码时,您会感谢自己。
此时我认为函数和子程序的作用对我来说已经很清楚了。不过现在不太确定了。。。一直看到写的
"Functions can return values / subroutines cannot return a value."
和
"a function can only return a single value"(我意识到他们也可以 return 数组等等)。
但如果我将 "result" 变量传递给子例程,我似乎可以有效地 "return a value from a subroutine"...这是否被视为 "poor practice?" 或我是否遗漏了其他一些关键这里的概念...
方法#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 个参数和 returns 一个值(你写到 z
)做了一些事情。在第二个示例中,除非您查看子例程,否则您看不到会发生什么 - 不仅是函数定义,您还需要阅读完整的代码,以便您可以判断哪些参数将被操作,哪些不会。
在软件开发中,当你调用一个子程序时,你不想看这个子程序——甚至经常是你看不到它。让子例程完成它的工作,但没有任何副作用。
Use a function whenever possible, it keeps your code much more readable. Trust me...
在(极少数)情况下,您希望从一个子例程中接收多个结果。在那种情况下,我建议在参数前面明确放置关键字 ByRef
(即使在 VBA 中这在技术上是不必要的,因为它是默认设置)。并发表评论说明为什么会这样。当您在数周、数月或数年后查看您的代码时,您会感谢自己。