我有两个处理类似但不同数据的函数。因此,在两者之间使用了一些变量,有些变量不是。
哪种更好的做法?
在函数中声明决定函数并将它们作为参数传递的变量:
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。
谢谢!
答案 0 :(得分:0)
如果变量实际上没有携带任何有用的值,那么在我看来,最好将它们保留在方法的本地。传入,意外值可能会导致错误吗?
答案 1 :(得分:0)
这取决于变量实例化的“昂贵”程度。如果对象的构造在性能或资源方面是昂贵的,那么创建它们一次并将它们传递给方法当然更好。
如果你想保持你的方法彼此独立并且构造不昂贵,那么在本地创建它们是一种良好而干净的方式
由于ProcessDataA和ProcessDataB都是私有的,因此您可以在以后轻松更改方法。
答案 2 :(得分:0)
当a
,b
和c
始终与每个ProcessData
方法具有相同的值而不是第一个选项时。这样就可以避免在程序中引入错误,例如,当其中一个变量必须改变一次时,你就会忘记这两个方法中的一个。
此外,根据您的示例代码,a
和b
可以在您的班级中定义为常量。
尽量避免复制和粘贴。 "Don't repeat yourself"