(微优化) - 退出功能或让它运行所有代码

时间:2017-09-28 07:18:09

标签: vb.net micro-optimization

我很好奇是否应该在编码时避免使用Exit Sub, Exit Function等等?我在不同的地方读到这是一种不好的做法,如果可能的话,你应该避免它。

我在下面提供了一个函数来演示我的意思:

Function Test()

    Dim X As Integer
    X = 5

    If X = 10 Then
        Test = True
        Exit Function
    Else
        Test = False
        Exit Function
    End If

End Function
  

在上面的情况中,Exit Function并不是必需的,因为整个代码将能够完成整个例程而不会出现问题。但是通过添加它会导致一些问题吗?

4 个答案:

答案 0 :(得分:2)

您使用的样式来自VB5和VBA时代,它不支持Return语句,我们需要将返回值直接分配给函数名称。在VB.NET中,您应始终使用Return赋值。 Return将在一个语句中执行赋值和退出调用。

关于您的特定示例,我的印象是Exit Function语句只是对最近的GoToEnd Function执行操作。因此,在您的情况下这些语句是多余的,可能会被编译器条带化(不确定这个)。

请注意,Exit语句从代码可读性的角度来看变成了一场噩梦。我最近成了这个特殊问题的受害者。 Visual Basic是一种冗长的语言,读者不会注意到Exit语句。结构化If/Else块更易读。

答案 1 :(得分:1)

这取决于代码的当前上下文。如果你在一个区块内(是一个循环,Sub或函数等)并且试图离开,Exit Statement将会很好。

Return Statement也可以与Exit FunctionExit Sub相同,请参阅this SO question的答案。但是当我希望将控制权返回给调用代码时,我个人更喜欢函数中的exit语句,但没有值返回。

答案 2 :(得分:1)

几乎在每种情况下,都有一种“更好”的方法,而不是使用setTimeout

以下示例将给出相同的结果,但更短,并且在我看来更清楚。

Exit Function

答案 3 :(得分:0)

要澄清一点,正如@dotNET所说。这是pre .net代码。在dot net中,您可以将代码稍微更改为

Function Test() As Boolean

    Dim X As Integer
    X = 5

    If X = 10 Then
        Return True
    Else
        Return False
    End If

End Function

这将test定义为返回布尔结果的函数,并使用Return语句来错误...将结果返回给调用语句并立即退出上述{{ 1}}陈述

例如..

Return