7
votes

Un moyen facile de sortir d'un bloc Java?

Je me demandais simplement s'il y a un moyen de sortir d'un bloc Java. Il peut être n'importe quel bloc - s'il s'agit de bloc, pour bloc ou même un simple {}. C'est parce que je rencontre souvent de telles situations xxx pré>

ces multiples niveaux d'indentation sont en place le code que j'écris. P>

plutôt que j'ai besoin d'une certaine façon de faire cela p >

if((retCode = performSomething()) != SUCCESS)
  GET_OUT_OF_BLOCK
if((retCode = performSomethingElse()) != SUCCESS)
  GET_OUT_OF_BLOCK


6 commentaires

Où est mon goto orienté objet?


Il y a réellement goto en Java. Si je vous attrape en utilisant, je ferai tomber vos oreilles.


@Dustin: Il est impossible d'utiliser Goto en Java - c'est un mot réservé (c'est-à-dire pas un identifiant légal), mais non utilisé pour rien.


Rien n'est impossible. CODE CODE CODE CODE CODE CODE CODE directement et utilisez fréquemment l'opcode Goto ..


@emory, cela fait Ceci une question connexe.


Dans Retrospect, je pensais à une "chaque méthode ne devrait avoir qu'un seul retour" école de pensée, qui était une méthode de pensée assez stupide.


4 Réponses :


20
votes

La construction correcte à utiliser est retour . Cela implique que ce qui est un bloc dans votre exemple devrait vraiment être une méthode, mais c'est une bonne idée de toute façon - des méthodes si longues qu'ils contiennent de multiples alternatives de flux de contrôle compliquées sont un anticitateur. Faites-vous une faveur et passez à «un objectif par méthode» aujourd'hui!


0 commentaires

2
votes

Vous semblez utiliser les ifs imbriqués ici pour la manipulation des erreurs.

Si vous passez à la manipulation des exceptions structurées, vous pourriez peut-être vous débarrasser des constructions profondément imbriquées du tout.

Cela impliquerait toutefois que interprétant () et interprétationelse () lancerait des exceptions au lieu de renvoyer des codes d'erreur.


7 commentaires

L'utilisation d'exceptions pour des conditions non exceptionnelles ou un flux de contrôle n'est définitivement pas recommandée.


@Eljenso: Eh bien, si vous devez abandonner le traitement, car une opération n'a pas réussi, ce serait une bonne affaire pour utiliser une exception. Mais c'est toujours un petit jugement ...


Les exceptions sont destinées aux situations de crash et de brûlure. Si vous êtes maintenant au préalable, une certaine opération peut échouer (par exemple en raison de certaines valeurs de vos données) et que vous savez que vous devez y faire face (validation), puis utiliser une exception est le mauvais choix. Donc, probablement la meilleure solution ici serait des codes de retour (comme l'ont fait l'OP) + des exceptions non vérifiées.


@Eljenso: Les exceptions conviennent parfaitement aux erreurs de validation quand il est logique de les faire propager la pile d'appels. La décision entre les exceptions et les codes de retour ne devrait pas être basée sur la division des cheveux sur ce qui est exactement une "situation exceptionnelle", mais sur ce qui conduit à une meilleure conception. Les codes d'erreur qui ne doivent pas être ignorés et doivent être transmis sont mauvais, peu importe ce qui les cause.


@Michael C'est en effet une meilleure conception. En utilisant des exceptions pour le flux de contrôle «normal», pour les choses que votre programme devrait gérer, n'est souvent pas le meilleur choix. La fractionnement des cheveux n'est pas impliquée car vous savez ce que votre programme est censé faire, non?


@Eljenso: À la suite de cette logique, des exceptions ne doivent jamais être utilisées pour tout ce qui ne provoque pas le programme (c'est-à-dire qu'ils ne devraient donc jamais être pris). En discutant sur ce qui est ou n'est pas un "flux de contrôle normal" finit toujours par la fractionnement des cheveux sur les cas de bord. Imo le nom "exception" est un hareng rouge. Ils sont simplement une autre construction de contrôle de flux, qui permet de passer à la commande de la pile d'appels. Ils sont meilleurs que les codes de retour pour des choses qui ne concernent pas la méthode d'appel immédiate, pas si bonne pour des choses que la méthode manipulera et horrible pour le contrôle de flux interne de méthode


@Michael OK, bons points. Néanmoins, je préfère avertir les personnes contre l'utilisation d'exceptions telles que décrites ci-dessus, car elle peut devenir réelle. Des exceptions en bouillonnant la pile en attente d'être attrapées ont également tendance à casser l'encapsulation et à augmenter le couplage. Aussi, comme vous le soulignez, je pense que les exceptions doivent rarement être attrapées (ou, autrement, vous devriez avoir relativement peu d'essais / attraper des constructions) sauf (a) que vous n'êtes forcé par API ( b) "Catch-To tout" de haut niveau. Mais comme pour tous les conseils / règles / directives: vous pouvez décider d'y aller.



7
votes

Regardez sur break et Continuer


1 commentaires

La seule autre réponse correcte, comment ne pas être votée?



-1
votes

<à nouveau l'évangélisation>

Ne faites pas ça. À mon avis, la bonne façon pour un bloc est un début au début, un arrêt à la fin, arrêt complet.

Même avec une méthode, vous ne devriez avoir qu'un seul retour à la fin.

À l'intérieur du Bloc, vous écrivez le flux des instructions de course avec si etc., du début à la fin, plus vous pouvez, plus vous pouvez (donc, parfois, vous écrivez le retour ou la pause etc à l'intérieur de l'intérieur, d'accord; il devrait s'agir d'une exception).

C'est mieux (mais pas obligatoire) d'écrire Déclarations d'achèvement normales .


1 commentaires

-1 pour fournir une opinion personnelle plutôt qu'une réponse techniquement correcte