69 votes

Devrais-je éviter d'utiliser des instructions d'étiquette Java?

Aujourd'hui, un de mes collègues m'a suggéré de refactoriser mon code afin d'utiliser une instruction label pour contrôler le flux dans deux boucles imbriquées que j'avais créées. Je ne les ai jamais utilisées auparavant car, personnellement, je pense qu'elles diminuent la lisibilité d'un programme. Je suis disposé à changer d'avis sur leur utilisation si l'argument est suffisamment solide cependant. Quelles sont les opinions des gens sur les déclarations de l'étiquette?

49voto

Tom Hawtin - tackline Points 82671

De nombreux algorithmes sont exprimés plus facilement si vous pouvez sauter à travers les deux boucles (ou une boucle contenant une instruction switch). Ne vous sentez pas mal à ce sujet. D'autre part, il peut indiquer une trop grande complexité de la solution. Afin de prendre du recul et de regarder le problème.

Certaines personnes préfèrent parler "d'une seule entrée, une seule sortie approche à toutes les boucles. C'est-à-dire en évitant la rupture (et continue) et de retour anticipé pour les boucles tout à fait. Il peut en résulter de code dupliqué.

Ce que je vais éviter de le faire est d'introduire auxiliaire variables. Masquage de flux de contrôle au sein de l'état ajoute à la confusion.

Le fractionnement marqué boucles en deux méthodes peuvent être difficiles. Les Exceptions sont probablement trop lourd. Essayez une seule entrée, une seule sortie approche.

35voto

CodeSlave Points 7133

Suite à des étiquettes comme goto: de les Utiliser avec parcimonie, et seulement quand ils font de votre code plus compréhensible et plus rapide,

par exemple, Si vous êtes dans les grandes boucles de six niveaux de profondeur et que vous rencontrez une condition qui rend le reste de la boucle inutile pour terminer, il n'y a aucun sens à avoir 6 piège supplémentaire des portes dans vos instructions de condition pour sortir de la boucle au début.

goto ne sont pas mal, c'est juste que parfois les gens les utilisent dans de mauvaises manières. La même chose pourrait être dite pour les étiquettes.

27voto

Peter Lawrey Points 229686

Il y a peu d'occasions où vous avez besoin d'étiquettes et elles peuvent être déroutantes car elles sont rarement utilisées. Cependant, si vous devez en utiliser un, utilisez-en un.

BTW: cela compile et s'exécute.

 class MyFirstJavaProg {  
        public static void main(String args[]) {
           http://www.javacoffeebreak.com/java101/java101.html
           System.out.println("Hello World!");
        }
}
 

8voto

Outlaw Programmer Points 6610

Je suis curieux d'entendre quelle est votre alternative aux étiquettes. Je pense que cela va en gros se résumer à l'argument "retour le plus tôt possible" par rapport à "utiliser une variable pour conserver la valeur de retour et ne revenir qu'à la fin".

Les étiquettes sont assez standard lorsque vous avez des boucles imbriquées. La seule façon de réellement réduire la lisibilité est lorsqu'un autre développeur ne les a jamais vus auparavant et ne comprend pas ce qu'ils veulent dire.

5voto

Pyrolistical Points 12457

Je pense qu'avec la nouvelle boucle for-each, l'étiquette peut être très claire.

Par exemple:

 sentence: for(final Sentence sentence: paragraph) {
  for(final String word: sentence) {
    // do something
    continue sentence;
  }
}
 

Je pense que cela semble très clair en ayant votre étiquette identique à votre variable dans la nouvelle pour-chacun. En fait, peut-être que Java devrait faire le mal et ajouter des étiquettes implicites pour chaque variable heh

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X