【发布时间】:2010-11-03 12:42:39
【问题描述】:
“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后的工作方式有什么不同吗?
也就是说,
Private Sub exitNow()
Exit Sub
End Sub
或
Private Sub exitNow()
Return
End Sub
【问题讨论】:
标签: vb.net syntax return subroutine
“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后的工作方式有什么不同吗?
也就是说,
Private Sub exitNow()
Exit Sub
End Sub
或
Private Sub exitNow()
Return
End Sub
【问题讨论】:
标签: vb.net syntax return subroutine
来自文档:
在 Sub 或 Set 过程中,Return 语句等同于 Exit Sub 或 Exit Property 语句,不得提供表达式。
所以在这种情况下它们是相同的。
(Return (<value>) 用于函数和 property.get 中。显然在这种情况下略有不同)。
【讨论】:
比起Exit Sub,我更喜欢Return。因为有时您会从Sub 更改为Function。在这种情况下,Exit Sub 可以转换为Exit Function,但这假设函数名称之前有一个分配(类似于 VB 6),这很可能没有发生。 Return 会捕捉到这种情况 - 如果方法应该返回一个值,没有参数的 Return 将在编译时失败。
【讨论】:
如果您检查 2 条语句的 IL 输出,它们是相同的。但是,由于 'return' 是为了将某些东西推回给调用者,所以严格来说,'Exit Sub' 更适合在 Sub 中使用。
【讨论】:
Exit Sub没有错,但是它特定于视觉基础; return 用于退出受C 启发的所有语言的子程序:C#、java、C++、Objective-C。
在这种情况下它们是相同的。
但是,从代码可读性的角度来看,“Exit Sub”会更清晰,因为“Return”表示某些值正在用作输出(子例程不是这种情况)。
【讨论】:
Exit Sub 没有任何问题,但是它是特定于 Visual Basic 的; return 用于退出受C 启发的所有语言的子程序:C#、java、C++、Objective-C。投了反对票,因为这与两年前的 chikani's answer 说的一样,所以没有增加讨论。
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
【讨论】:
虽然有像保护子句这样的例外,但在大多数情况下,我会考虑方法太长的迹象。
【讨论】: