【问题标题】:Declare variables and pass them to one of two functions, or declare variables in each function? (possibly VB.NET specific)声明变量并将它们传递给两个函数之一,还是在每个函数中声明变量? (可能特定于 VB.NET)
【发布时间】:2013-12-20 20:47:24
【问题描述】:

我有两个函数可以处理相似但不同的数据。因此,有些变量在两者之间使用,有些则没有。

以下哪一个会更好?

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

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。

谢谢!

【问题讨论】:

  • 你能发布两个不同但相似的功能吗?我有一个关于如何更有效地整合这些内容的想法,但它高度依赖于细节,或者至少更容易以这种方式解释。
  • @JoelCoehoorn 很遗憾,我不能分享更多。
  • 为什么在方法 1 中将 a、b 和 c 声明为 ByRef?如果您想在方法中更改它们,则无法在方法 2 中更改它们,因为您创建的本地实例一旦离开该方法就无法再访问。
  • 哎呀,我不知道我为什么要这样写。在代码中,它们按预期编写为 ByVals。感谢您指出这一点!

标签: vb.net function arguments byref


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-06
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多