“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后工作的方式有什么不同吗?
那是,
Private Sub exitNow()
Exit Sub
End Sub
或者
Private Sub exitNow()
Return
End Sub
“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后工作的方式有什么不同吗?
那是,
Private Sub exitNow()
Exit Sub
End Sub
或者
Private Sub exitNow()
Return
End Sub
从文档:
在 Sub 或 Set 过程中,Return 语句等效于 Exit Sub 或 Exit Property 语句,并且不得提供表达式。
因此,在这种情况下,它们是相同的。
(Return (<value>)
用于函数和property.get。显然在这种情况下略有不同)。
我倾向于更Return
喜欢Exit Sub
. 因为偶尔你会从Sub
变为Function
。在这种情况下Exit Sub
可以转换为Exit Function
,但这假设函数名之前有一个分配(类似于 VB 6),这很可能没有发生。Return
会捕捉到这种情况 - 如果方法应该返回一个值,Return
没有参数将在编译时失败。
如果您检查 2 条语句的 IL 输出,它们是相同的。但是,由于 'return' 意味着将某些东西推回给调用者,所以严格来说,'Exit Sub' 更适合在 Sub 中使用。
在这种情况下,它们是相同的。
但是,从代码可读性的角度来看,“Exit Sub”会更清晰,因为“Return”表示某些值正在用作输出(子例程不是这种情况)。
CalcFact(X)
。为特定任务执行一些流程。
函数是一个特定的过程,通过传递一些特定的参数来实现特定的任务,它必须返回一些可以用来完成整个任务的值,例如验证用户名和用户密码。
简而言之 Sub 不返回值,我们直接调用它"Print HelloWorld()"
,而函数则如下:
ValidUsersNameAndPass("Johne","jOhNe13042019")
' 这可以返回一个布尔值。ValidUsersNameAndPass("Johne","jOhNe13042019");
// 这可以返回一个布尔值。我想确认它们在 lambda 表达式中的行为也相同,它们确实:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub
虽然有像保护子句这样的例外,但在大多数情况下,我会认为要么是方法太长的迹象。