使用Return语句与为函数赋值之间有什么区别吗?

时间:2015-08-17 12:19:18

标签: vb.net

我只是在工作时浏览我们的代码库,尝试清除编译时生成的警告,并且有大量“函数没有As子句,子句”警告。

虽然返回并将大部分内容更改为Sub而不是Function,但我偶尔会忽略Return语句,因为我只是突出显示方法名称并查找值分配给它,这是在大多数代码中完成的。

所以我只是想知道这些之间是否有任何区别:

Private Function Foo() As String
    Foo = String.Empty
End Function

或者:

Private Function Foo() As String
    Return String.Empty
End Function

从功能上看,它似乎完全相同,但我不确定在编译器如何解释这一点时是否存在幕后差异。

3 个答案:

答案 0 :(得分:6)

主要区别在于Return退出函数,而为函数名赋值则没有。所以两个等价物应该是

Private Function Foo() As String
    Foo = String.Empty
    Exit Function
    '.....
End Function

或者:

Private Function Foo() As String
    Return String.Empty
    '.....
End Function

答案 1 :(得分:3)

没有显着差异。

但是,我更喜欢使用Return <variable>,因为它在代码可读性方面更加清晰。当然这是个人偏好。

它还可以汲取踩到另一个同名变量的可能性。

答案 2 :(得分:3)

就流控制语句而言,它们不一定是相同的,尽管给出的两个例子的行为相同。

执行此操作时:

Return String.Empty

函数退出,函数的结果是提供的值。当你这样做时:

Foo = String.Empty

函数的结果是提供的值,但函数退出。你可以这样做:

Foo = String.Empty
' other logic
Foo = someValue

如果函数退出other logic中的某个位置,例如来自Exit Function语句,则其结果将为String.Empty,因为这是设置为结果的最后一个值。如果没有,则其结果为someValue,因为 将是设置为结果的最后一个值。

它们用于类似目的,从函数返回值。但是代码的流程(以及随后的可读性)可能会有很大差异,具体取决于它们的使用方式。