Оба "Exit Sub" или "Return", похоже, выполняют одно и то же - выйдите из подпрограммы. Есть ли разница в том, как они работают под обложками?
То есть
Private Sub exitNow()
Exit Sub
End Sub
или
Private Sub exitNow()
Return
End Sub
Оба "Exit Sub" или "Return", похоже, выполняют одно и то же - выйдите из подпрограммы. Есть ли разница в том, как они работают под обложками?
То есть
Private Sub exitNow()
Exit Sub
End Sub
или
Private Sub exitNow()
Return
End Sub
Из документа:
В процедуре Sub или Set оператор Return эквивалентен оператору Exit Sub или Exit Property, и выражение не должно предоставляться.
В этом контексте они одинаковы.
Я предпочитаю Return
более Exit Sub
. Потому что время от времени вы меняетесь от Sub
до Function
. В этом случае Exit Sub
можно преобразовать в Exit Function
, но это предполагает, что было ранее присвоено имя функции (подобно VB 6), что, скорее всего, не произошло. Return
поймает эту ситуацию - если метод должен вернуть значение, Return
без аргумента не будет работать во время компиляции.
Если вы проверяете вывод IL из двух операторов, они одинаковы. Однако, поскольку возврат предназначен для того, чтобы оттолкнуть что-то обратно вызывающему, так строго говоря, "Exit Sub больше подходит для использования в Sub.
В этом контексте они одинаковы.
Однако, с точки зрения удобочитаемости кода, "Exit Sub" будет более понятным, так как "Return" указывает, что в качестве вывода используется какое-то значение (что не относится к подпрограммным программам).
CalcFact(X)
.Выполните некоторые процессы для конкретной задачи.
Функция - это особый процесс, запрограммированный для достижения конкретной задачи путем передачи некоторых конкретных параметров, и он должен возвращать некоторое значение, которое можно использовать для выполнения общей задачи, например проверки имени пользователя и прохода пользователя.
Короче говоря, Sub не возвращает значение, и мы вызываем его напрямую "Print HelloWorld()"
, тогда как функции выполняют такие функции, как:
ValidUsersNameAndPass("Johne","jOhNe13042019")
'Это может вернуть логическое значение.ValidUsersNameAndPass("Johne","jOhNe13042019");
// Это может вернуть логическое значение.Хотя есть исключения, такие как предложения охраны, в большинстве случаев я бы рассмотрел либо знак того, что метод слишком длинный.
Я хотел подтвердить, что они действуют одинаково и в лямбда-выражениях, и они делают:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub