Синтаксис:“Exit Sub” или “Return” в VB.NET подпрограммы

StackOverflow https://stackoverflow.com/questions/1004657

Вопрос

Оба "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 для двух операторов, они будут одинаковыми.Однако, поскольку ’return’ предназначен для отправки чего-либо обратно вызывающему, строго говоря, ‘Exit Sub’ больше подходит для использования в Sub.

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

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

  • Прежде всего, процедуры поставляются с sub, мы должны знать, что мы работаем над конкретными процедурами, которые не возвращают определенное значение с возможностью передачи некоторых определенных параметров или даже без передачи какого-либо параметра.Такие , как:
  • Напечатать что-нибудь().
  • Вычислить факториал целого числа 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top