2013-12-20 38 views
0

我有两个功能处理相似,但不同的数据。正因为如此,两者之间使用了一些变量,有些则不是。声明变量并将它们传递给两个函数中的一个,或者在每个函数中声明变量? (可能VB.NET特定)

哪一个会更好?在功能

声明变量决定功能,将它们作为参数:

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

@JoelCoehoorn不幸的是,我不能分享太多。 –

+1

为什么你在方法1中声明a,b和c为ByRef?如果您想要在方法中更改它们,则无法在方法2中更改它们,因为您创建的本地实例在离开方法后无法再访问。 – Markus

回答

0

a,bc将始终具有相同的值为每个ProcessData方法比坚持第一个选项。这样可以避免在程序中引入错误,例如,其中一个变量必须更改一次,并且您忘记了两种方法之一。

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

尽量避免复制和粘贴。 "Don't repeat yourself"

0

如果变量没有实际携带任何有用的值,那么在我的opionion中,最好让它们保持本地方法。可以通过,意想不到的价值可能导致错误?

0

这取决于变量的实例化是多么“昂贵”。如果对象的构建在性能或资源方面是昂贵的,那么创建它们当然更好,并将它们传递给方法。
如果你想保持你的方法相互独立,并且建设并不昂贵,那么在本地创建它们是一个不错的和干净的方法。
由于ProcessDataA和ProcessDataB都是私有的,您可以稍后轻松更改该方法。