我有两个函数处理相似但不同的数据。因此,有些变量在两者之间使用,有些则不使用。
以下哪一个会更好?
在决定函数的函数中声明变量并将它们作为参数传递:
Private Sub ProcessData(ByVal x)
Dim a = 1, b = "a", c = new SomeObject(x)
If condition Then
ProcessDataA(x, a, b, c)
Else
ProcessDataB(x, a, b, c)
End If
End Sub
Private Sub ProcessDataA(ByVal x, ByVal a, ByVal b, ByVal c)
' code
End Sub
Private Sub ProcessDataB(ByVal x, ByVal a, ByVal b, ByVal c)
' code
End Sub
或者不传递参数而只是实例化变量两次?
Private Sub ProcessData(ByVal x)
If condition Then
ProcessDataA(x)
Else
ProcessDataB(x)
End If
End Sub
Private Sub ProcessDataA(ByVal x)
Dim a = 1, b = "a", c = new SomeObject(x)
' code
End Sub
Private Sub ProcessDataB(ByVal x)
Dim a = 1, b = "a", c = new SomeObject(x)
' code
End Sub
一方面,第一种方法可以防止代码重复,但我不确定编译器/解释器如何处理它,或者这种方法是否有一些我不知道的开销。
如果答案因语言/编译器而异,我对 .NET 框架或 VB.NET 特别好奇。
谢谢!
当a
时,b
和 c
对于每个ProcessData
方法将始终具有相同的值,而不是坚持第一个选项。这样,您可以避免在程序中引入错误,例如,当这些变量之一必须更改一次并且您忘记了两种方法之一时。
此外,根据您的示例代码,可以将a
和b
定义为类中的常量。
尽量避免复制和粘贴。"不要重复自己"
如果变量实际上没有任何有用的值,那么在我的观点中,最好将它们保留在方法的本地。 传入的意外值是否可能导致错误?
这取决于变量实例化的"昂贵"程度。如果对象的构造在性能或资源方面很昂贵,当然最好创建一次并将它们传递给方法。
如果你想让你的方法彼此独立,并且结构不昂贵,在本地创建它们是一个很好的和干净的方法。
由于 ProcessDataA 和 ProcessDataB 都是私有的,因此您可以在以后轻松更改方法。