Sortir d'une boucle en Java
Je suis en utilisant Java, mais je pense que cette question s'applique quelle que soit la langue. Je veux juste vous demander si il est préférable de sortir d'une boucle à l'aide d'un booléen qui, je bascule dans la boucle, ou simplement utiliser break;
Par exemple, j'ai écrit une méthode pour obtenir le valide se déplace pour une Reine du jeu d'échecs.
private static final int[][] DIRS = {{0, 1}, {0, -1}, {1, 0}, { -1, 0}, {1, 1}, { -1, -1}, { -1, 1}, {1, -1}};
public Vector<Move> getValidMoves() {
Vector<Move> validMoves = new Vector<Move>();
for (int i = 0; i < DIRS.length; i++) {
boolean stopped = false;
int newX = x + DIRS[i][0];
int newY = y + DIRS[i][1];
while (!stopped && newX >= 0 && newX < 8 && newY >= 0 && newY < 8) {
if (board[newX][newY] == null) {
validMoves.add(new Move(x, y, newX, newY));
newX += DIRS[i][0];
newY += DIRS[i][1];
} else {
if (board[newX][newY].getColour() == colour) {
stopped = true;
} else {
validMoves.add(new Move(x, y, newX, newY));
stopped = true;
}
}
}
}
return validMoves;
}
Si je sortir de la boucle while en utilisant break; au lieu de définir arrêté à vrai comme je le fais, c'est ma compréhension qu'il fonctionne de manière plus efficace, mais n'est pas le plus grand de style de code.
- Vu le code de la Reine, je dirais que vous avez plus à vous soucier que de simplement une instruction break. Par exemple, essayez d'éviter de Vecteur si vous n'avez pas besoin de Thread-safe structure de données (utiliser ArrayList au lieu de cela, Essayez d'encapsuler plus de logique dans les objets (tels que les essais, si un système de coordonnées sur le conseil d'administration, ainsi que le remplacement de la magie des nombres tels que "8")
- Ok, merci pour les conseils. Je vais les prendre en considération.
Vous devez vous connecter pour publier un commentaire.
En terme de Performance, il ne sera pas beaucoup d'importance, vous êtes l'allocation de 1 booléenne sur la pile et en ajoutant 1 comparaison à chaque tour de boucle, donc rien à craindre.
Elle dépend principalement de la si vous voulez terminer l'exécution du reste de la boucle de code avant de quitter ou non. Saut de quitter immédiatement et paramètre un booléen va attendre pour la prochaine itération avant de s'arrêter.
Si vous n'avez pas besoin de terminer l'itération de boucle, votre code sera plus facile à lire si vous utilisez
break
break
break
existe pour la seule raison de sortir d'une boucle, je ne peux pas penser à une meilleure façon de le faire.Que l'utilisation d'une variable booléenne ici n'affectent pas beaucoup pour les performances, c'est à propos de la lisibilité. Certaines personnes croit à l'aide de break réduit du code de la lisibilité pour deux raisons.
Est que l'utilisateur est parfois impossible de lire le code de manière séquentielle (un saut de lecture) lors de l'instruction break est utilisé. Cela peut être source de confusion comme un lecteur devez déterminer où l'instruction break apporte de la prochaine opération.
Une autre chose est que l'utilisation de la variable de condition de fin de l'aide le lecteur comprend pourquoi il est arrêté si vous le nom de la variable de façon significative. e.g si vous utilisez la fonction isEmpty variable booléenne pour la condition d'arrêt, il est très clair que la boucle s'est arrêté parce que tout est vide.
Je ne suis pas contre l'utilisation de break, mais je pense que ce que vous devez faire est de le rendre lisible que possible.
Je vous suggère de faire ce que vous croyez est la plus claire. À mon humble avis à l'Aide d'un booléen peut être plus clair pour les boucles imbriquées, mais pour de simples boucles à l'aide d'un drapeau est inutilement verbeux.
Définitivement l'utilisation de pause. Qu'est ce que le mot clé est pour, il génère plus de code concis, ne pas en faire quelqu'un de lire votre code me demande d'où qu' "arrêté" dans la boucle vient, et elle est probablement plus rapide, trop.
break
en général est plus rapide que de sortir avec une valeur booléenne sortie de la condition. Et je m'interroge sur cette revendication.Dépend de qui vous parlez. J'ai un professeur d'université qui a juré qu'il avait tirer sur tous les étudiants qui n'ont pas la sortie d'une structure de contrôle (comme une boucle) avec une expression normale de la vérifier.
Cependant, j'ai vu que cela pourrait être "sanctionné", il y a des moments où la sortie d'une boucle ou une autre structure de contrôle précoce est souhaitable. Avec cela à l'esprit, je dis "allez-y". Vous pouvez toujours faire preuve de discipline et d'avoir un code lisible qui n'ont pas un comportement inattendu avec une sortie précoce (tant que la sortie serait une raison valable de quitter cette structure.
C'est exactement pourquoi il est pause dans la langue. Je viens de l'utiliser.
Comme les utilisateurs mentionnés ci-dessus, certainement utiliser la pause. La sortie d'une boucle est de quoi il est fait pour.
Un point qui ne semble pas avoir été soulevée encore:
En Java (pas exclusivement tout de même), en sortant de boucles imbriquées sera plus élégant avec
break
que d'avoir le même état imbriqué dans chaque niveau. Il sera également rendre le code plus maintenable.En outre, il peut rendre la logique de la boucle beaucoup plus simple, parce que dès que vous descendez à un bris de condition, vous pouvez agir, plutôt que de continuer l'exécution du code. Ce trop promotoes de la modularité dans le corps de la boucle.
Vous pouvez lire sur l'utilisation de la pause de l'oracle de la page web
Les Instructions De Branchement Tutoriel
à l'aide d'un Break pour sortir d'une boucle est de l'accepter comme une bonne pratique. alors si vous l'utilisez ou pas, c'est à vous.
maintenant, si vous voulez améliorer la lisibilité de votre code et de sa flexibilité, vous pouvez envisager de briser vous boucles complexes dans des fonctions.