我只是在工作时浏览我们的代码库,尝试清除编译时生成的警告,并且有大量“函数没有As子句,子句”警告。
虽然返回并将大部分内容更改为Sub
而不是Function
,但我偶尔会忽略Return
语句,因为我只是突出显示方法名称并查找值分配给它,这是在大多数代码中完成的。
所以我只是想知道这些之间是否有任何区别:
Private Function Foo() As String
Foo = String.Empty
End Function
或者:
Private Function Foo() As String
Return String.Empty
End Function
从功能上看,它似乎完全相同,但我不确定在编译器如何解释这一点时是否存在幕后差异。
答案 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
,因为 将是设置为结果的最后一个值。
它们用于类似目的,从函数返回值。但是代码的流程(以及随后的可读性)可能会有很大差异,具体取决于它们的使用方式。