0

我有两个处理相似但不同数据的函数。正因为如此,有一些变量在两者之间使用,而另一些则没有。

其中哪一个是更好的做法?

在决定函数的函数中声明变量并将它们作为参数传递:

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 感到特别好奇。

谢谢!

4

3 回答 3

0

如果变量实际上没有携带任何有用的值,那么在我看来,最好将它们保留在方法的本地。传入的意外值是否可能导致错误?

于 2013-12-20T21:26:51.040 回答
0

这取决于变量的实例化有多“昂贵”。如果对象的构造在性能或资源方面很昂贵,当然最好创建一次并将它们传递给方法。
如果您想让您的方法彼此独立并且构建成本不高,那么在本地创建它们是一种很好且干净的方法。
由于 ProcessDataA 和 ProcessDataB 都是私有的,您可以在以后轻松更改方法。

于 2013-12-20T21:32:41.430 回答
0

When a, bandc将始终对每个方法具有相同的值,而ProcessData不是坚持第一个选项。这样,您就可以避免在程序中引入错误,例如,当这些变量之一必须更改一次而您忘记了这两种方法之一时。

此外,根据您的示例代码,a可以b在您的类中定义为常量。

一般尽量避免复制和粘贴。“不要重复自己”

于 2013-12-20T21:35:46.220 回答