comment quitter une méthode en java


Réponse 1:

Oui. Syntiquement, return est la bonne façon de terminer une fonction qui renvoie void.

Cependant, stylistiquement, un retour au milieu d'une fonction semble inélégant. C'est comme une de ces personnes qui se lèvent juste du milieu d'une conversation et partent… comme c'est impoli. Les sorties du milieu de la conversation doivent être réservées à des conditions exceptionnelles, et vous devez vraiment utiliser des exceptions pour des conditions exceptionnelles.

Les retours en milieu de fonction peuvent conduire à des bogues dans les fonctions longues. Parfois, ce qui se passe, c'est que quelqu'un écrit une fonction de 1000 lignes avec des retours pepperred ici et là .. Puis quelqu'un d'autre se rend compte que cette fonction bigass ne nettoie pas après elle-même, alors ils collent une routine de nettoyage à la fin et se rendent compte qu'il y a ces retours entre les fonctions qui ignorent le nettoyage. Donc, maintenant, ils doivent trouver tous ces retours et coller le nettoyage à chaque retour. Enfin, les blocs résolvent ce problème. Cependant, les blocs finally sont une solution à un problème créé au milieu des sorties de fonction, et vous devriez essayer de minimiser le milieu des sorties de fonction. En outre, l'OMI, les fonctions longues sont un problème plus important que le milieu de la sortie de fonction. Et généralement un milieu du retour de fonction est symptomatique d'un problème plus important: un code trop complexe. J'ai tendance à regarder au milieu de la fonction renvoie de travers

Maintenant, il y a des cas où le milieu des retours de fonction est parfaitement logique. Par exemple, dans les fonctions récursives, la convention est de placer la condition d'arrêt avant l'appel récursif. C'est bien de mettre le retour dans la condition d'arrêt. Tout le monde s'attend à ce qu'il soit là. Ce n'est pas un milieu de la sortie de conversation. C'est juste comment fonctionnent les fonctions récursives.


Réponse 2:

En général, oui. Mais avoir beaucoup de retours dans un gros bloc de code a tendance à le rendre moins lisible, donc au lieu de if {… return;}… certains développeurs utiliseront if {…} else {…} à la place. Mais il est encore mieux de diviser les grandes méthodes en plusieurs plus petites.

Dans le passé, certains développeurs utilisaient plutôt l'instruction GoTo, mettant une étiquette à la fin de la méthode et utilisant l'étiquette goto; dans le code. La déclaration GoTo a été discréditée, cependant, car de nombreux mauvais programmeurs l'ont mal utilisée pour créer un horrible code spaghetti qui devient rapidement très illisible. Donc, de nos jours, l'utilisation de GoTo est désapprouvée par la plupart et même interdite par certains. Là encore, vous n'en avez pas besoin, quelle que soit l'utilité de l'instruction GoTo.

La bonne façon en général est la façon dont votre code reste lisible. Si un retour au milieu de votre méthode rend les choses plus difficiles à comprendre, vous devez l'éviter. (Par exemple, si vous imbriquez trois boucles et 5 instructions if et que votre «retour» est précédé d'une indentation de 32 espaces ou 8 tabulations…


Réponse 3:

Oui, «revenir»; est la manière correcte de quitter un sous-programme qui ne renvoie pas de valeur. (Strictement parlant, une «fonction» renvoie une valeur, et un «sous-programme» ne le fait pas. La plupart des langages ne font pas cette distinction - FORTRAN le fait, et les langages fonctionnels comme LISP n'en ont pas besoin car tout est une fonction).

Plusieurs réponses ont mentionné qu'un retour au milieu d'un sous-programme est souvent de style médiocre, mais cela a souvent du sens dans un langage comme C qui n'a pas une bonne gestion des exceptions. En C - regardez la plupart des appels système Unix, par exemple - vous utiliseriez

if (input_invalid (x)) { error_flag = INVALID; revenir;}

au début d'un sous-programme qui fait quelque chose avec x, où en Java vous diriez

if (input_invalid (x)) { lancer une nouvelle IllegalInputException ("input"); }

Dans les deux langues, il est logique de commencer par quelque chose comme:

if (x == null) {// rien à faire ici revenir;}

avant de se lancer dans un processus assez complexe qui nécessiterait autrement un niveau supplémentaire d'indentation.


Réponse 4:

C'est en grande partie stylistique, mais décomposons-le.

Considérons d'abord une méthode non vide:

thisType myClass: Process (int v) { si (v == kSpecialValue) retourne quelque choseSpecial (); return defaultValue ();}

Cela scanne parfaitement bien et est concis. Bonne forme dans mon livre.

Mais avec une méthode vide:

void myClass: Process (int v) { if (v == kSpecialValue) { doSomethingSpecial (); revenir; } doDefault ();}

C'est beaucoup plus douteux. Il pourrait être écrit plus proprement comme suit:

void myClass: Process (int v) { si (v == kSpecialValue) doSomethingSpecial (); autre doDefault ();}

Donc, en général, je dirais d'éviter les retours de méthodes nulles, à moins qu'elles ne facilitent la lisibilité. Par exemple:

void myClass: Process (int v) { si (v == kOutOfBounds) revenir; étape 1 (v); étape 2 (v); étape 3 (v); }

Peut être légèrement plus lisible que:

void myClass: Process (int v) { if (v! = kOutOfBounds) { étape 1 (v); étape 2 (v); étape 3 (v); }}

Réponse 5:

Pour développer certaines des autres réponses, un retour au milieu est un drapeau rouge géant pour une fonction mal écrite qui devrait être refactorisée et / ou décomposée davantage. Ce n'est pas seulement un mauvais style, c'est un design médiocre.


Réponse 6:

Ce n'est pas n'importe quel type de standard mais est utile lorsque vous devez quitter une fonction vide avant d'atteindre la fin du corps de la fonction ->

void func () { si (...) { ... revenir; } ...}

Réponse 7:

Oui.


Réponse 8:

Oui.