Pregunta

Ambos " Salir Sub " o " Volver " Parece que logran lo mismo - salir de una subrutina. ¿Hay alguna diferencia en la forma en que funcionan bajo las cubiertas?

Eso es,

Private Sub exitNow()
    Exit Sub
End Sub

o

Private Sub exitNow()
    Return
End Sub
¿Fue útil?

Solución

Desde el documento:

  

En un procedimiento de Sub o Conjunto, la declaración de Devolución es equivalente a una declaración de Salida de Sub o Propiedad de Salida, y la expresión no se debe proporcionar.

Por lo tanto, son iguales en este contexto.

Otros consejos

Tiendo a preferir Return sobre Exit Sub . Porque de vez en cuando cambias de Sub a Function . En este caso, Exit Sub se podría convertir a Exit Function , pero esto supone que hubo una asignación previa al nombre de la función (igual que VB 6), que probablemente no lo hizo t pasar Return detectaría esta situación: si el método devuelve un valor, Return sin ningún argumento fallará en el momento de la compilación.

Si inspecciona la salida de IL de las 2 declaraciones, son las mismas. Sin embargo, desde & # 8217; return & # 8217; está destinado a enviar algo a la persona que llama, por lo que estrictamente hablando, & # 8216; Exit Sub & # 8217; Es más adecuado para usar en un Sub.

Son los mismos en este contexto.

Sin embargo, desde el punto de vista de la legibilidad del código, " Salir Sub " sería más claro ya que el " Volver " indica que se está utilizando algo de valor como salida (lo que no es el caso de las sub-rutinas).

  • En primer lugar, los procedimientos vienen con sub, debemos saber que estamos trabajando en procedimientos específicos que no devuelven un valor específico con la capacidad de pasar algunos parámetros específicos o incluso sin pasar ningún parámetro. Tales como:
  • Imprimir algo ().
  • Calcule el factorial del número entero CalcFact (X) .
  • Realice algunos procesos para una tarea específica.

  • La función
  • es un proceso específico programado para lograr una tarea específica al pasar también algunos parámetros específicos, y debe devolver algún valor que se puede usar para completar la tarea general, como la validación del nombre de usuario y el usuario. pasar.

En pocas palabras, Sub no devuelve valor y lo llamamos directamente " Print HelloWorld () " , mientras que las funciones lo hacen como:

  • ValidUsersNameAndPass (" Johne ", " jOhNe13042019 ") 'Esto podría devolver un valor booleano.
  • ValidUsersNameAndPass (" Johne ", " jOhNe13042019 "); // Esto podría devolver un valor booleano.

Si bien hay excepciones como las cláusulas de guardia, en la mayoría de los casos consideraría una señal de que el método es demasiado largo.

Quería confirmar que también actúan igual en las expresiones lambda, y lo hacen:

Sub test()

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

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top