Question

Les deux "Exit Sub" " ou " Retour " semblent accomplir la même chose - quitter un sous-programme. Y a-t-il une différence dans la façon dont ils travaillent sous les couvertures?

C’est-à-dire

Private Sub exitNow()
    Exit Sub
End Sub

ou

Private Sub exitNow()
    Return
End Sub
Était-ce utile?

La solution

À partir de la doc:

  

Dans une procédure Sub ou Set, l'instruction Return est équivalente à une instruction Exit Sub ou Exit Property, et l'expression ne doit pas être fournie.

Donc, ils sont les mêmes dans ce contexte.

Autres conseils

J'ai tendance à préférer Renvoyer à Quitter Sub . Parce que de temps en temps, vous passez de Sub à Fonction . Dans ce cas, Exit Sub pourrait être converti en Exit Function , mais cela suppose qu'il y ait déjà eu une affectation au nom de la fonction (semblable à VB 6), qui n'a probablement pas été utilisée. t arriver. Return intercepterait cette situation - si la méthode devait renvoyer une valeur, Return sans argument échouera au moment de la compilation.

Si vous inspectez la sortie IL des 2 instructions, elles sont identiques. Cependant, depuis & # 8217; retourner & # 8217; est destiné à repousser quelque chose vers l'appelant, donc, à proprement parler, "Exit Sub" & # 8217; est plus approprié pour une utilisation dans un Sub.

Ils sont les mêmes dans ce contexte.

Toutefois, du point de vue de la lisibilité du code, " Exit Sub " serait plus clair depuis le & retour; retour " indique qu'une valeur est utilisée comme sortie (ce qui n'est pas le cas avec les sous-routines).

  • Tout d’abord, Procédures est livré avec sub, nous devrions savoir que nous travaillons sur des procédures spécifiques qui ne renvoient pas de valeur spécifique avec la possibilité de transmettre certains paramètres spécifiques ou même de ne transmettre aucun paramètre. Tels que:
  • Imprimer quelque chose ().
  • Calculez la factorielle du nombre entier CalcFact (X) .
  • Effectuer certains processus pour une tâche spécifique.

  • Function est un processus spécifique programmé pour réaliser une tâche spécifique en transmettant également certains paramètres spécifiques. Il doit également renvoyer une valeur pouvant être utilisée pour mener à bien la tâche globale, telle que la validation du nom d'utilisateur et de l'utilisateur. passe.

En bref, Sub ne renvoie pas de valeur et nous l'appelons directement "Print HelloWorld ()" , alors que les fonctions telles que:

  • ValidUsersNameAndPass ("Johne", "jOhNe13042019") 'Ceci pourrait renvoyer une valeur booléenne.
  • ValidUsersNameAndPass ("Johne", "jOhNe13042019"); // Ceci pourrait renvoyer une valeur booléenne.

Bien qu'il existe des exceptions telles que des clauses de sauvegarde, dans la plupart des cas, je considérerais soit le signe que la méthode est trop longue.

Je voulais confirmer qu'ils agissaient de la même manière dans les expressions lambda également, et ils le faisaient:

Sub test()

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

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top