Синтаксис: «Exit Sub» или «Return» в подпрограммах VB.NET - PullRequest
53 голосов
/ 17 июня 2009

Как «Выход Sub», так и «Return», похоже, выполняют одно и то же - выход из подпрограммы. Есть ли разница в том, как они работают под крышками?

То есть

Private Sub exitNow()
    Exit Sub
End Sub

или

Private Sub exitNow()
    Return
End Sub

Ответы [ 7 ]

64 голосов
/ 17 июня 2009

Из документа:

В процедуре Sub или Set оператор Return эквивалентен оператору Exit Sub или Exit Property, и выражение не должно предоставляться.

Так что в этом контексте они одинаковы.

14 голосов
/ 19 апреля 2017

Я предпочитаю Return, чем Exit Sub. Потому что время от времени вы меняете с Sub на Function. В этом случае Exit Sub можно преобразовать в Exit Function, но это предполагает, что ранее было присвоено имя функции (как VB 6), чего, скорее всего, не произошло. Return поймает эту ситуацию - если метод должен вернуть значение, Return без аргументов завершится неудачей во время компиляции.

6 голосов
/ 25 сентября 2012

Если вы проверите выход IL двух операторов, они совпадают. Тем не менее, так как «возврат» предназначен для передачи чего-либо обратно вызывающей стороне, строго говоря, «выход из Sub» более подходит для использования в Sub.

4 голосов
/ 04 февраля 2014

Они одинаковы в этом контексте.

Однако, с точки зрения читабельности кода, «Exit Sub» будет более понятным, поскольку «Return» указывает на то, что в качестве вывода используется какое-то значение (что не относится к подпрограммам).

1 голос
/ 13 апреля 2019
  • Прежде всего, Процедуры идут с подпрограммой, мы должны знать, что мы работаем над конкретными процедурами, которые не возвращают определенное значение с возможностью передачи некоторых определенных параметров или даже без передачи какого-либо параметра. Такие как:
  • Напечатать что-нибудь ().
  • Рассчитать факториал целого числа CalcFact(X).
  • Выполнение некоторых процессов для конкретной задачи.

  • Функция - это особый процесс, запрограммированный для достижения конкретной задачи путем передачи некоторых конкретных параметров, и он должен возвращать некоторое значение, которое можно использовать для выполнения общей задачи, например проверки имени пользователя и пользователя. пройти.

Короче говоря, Sub Не возвращает значение, и мы вызываем его напрямую "Print HelloWorld()", тогда как такие функции:

  • ValidUsersNameAndPass("Johne","jOhNe13042019") 'Это может вернуть логическое значение.
  • ValidUsersNameAndPass("Johne","jOhNe13042019"); // Это может вернуть логическое значение.
0 голосов
/ 18 июля 2016

Я хотел подтвердить, что они действуют одинаково и в лямбда-выражениях, и они делают:

Sub test()

    Dim a As Action = Sub() Exit Sub
    Dim b As Action = Sub() Return

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
0 голосов
/ 17 июня 2009

Несмотря на то, что существуют исключения, такие как охранные предложения, в большинстве случаев я бы рассматривал любой признак того, что метод слишком длинный.

...