314 votes

Continuer de mots clés en Java

J'ai vu ce mot-clé pour la première fois et je me demandais si quelqu'un pourrait m'expliquer ce qu'il fait. La situation dans laquelle j'ai vu le mot d'ordre était:

if(obj.isFlagSet())
     ;
else
     continue;

Je n'arrive pas à comprendre ce qu'il est en train de faire.

528voto

Dustin Points 35205

continuer est le genre de goto. Êtes-vous familier avec une pause? Il est plus facile de penser à eux en revanche:

break se termine la boucle (sauts pour le code ci-dessous)

continue se termine le reste de la transformation du code à l'intérieur de la boucle pour l'itération en cours, mais continue la boucle.

424voto

Diomidis Spinellis Points 8417

Un continue déclaration sans étiquette ré-exécuter à partir de l'état le plus profond while ou do, ou d'une boucle, et de la mise à jour de l'expression la plus intime for boucle. Il est souvent utilisé au début de la fin d'une boucle de traitement et d'éviter ainsi profondément imbriquée if des déclarations. Dans l'exemple suivant, continue obtiendrez la ligne suivante, sans traitement de l'instruction suivante dans la boucle.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

Avec une étiquette continue va exécuter de la même manière la conséquence de étiquetés boucle. Cela peut être utilisé pour échapper profondément boucles imbriquées, ou tout simplement pour plus de clarté. Si vous êtes vraiment pervers vous pouvez également l'utiliser pour simuler une forme limitée d' goto. Dans l'exemple suivant l' continue re-exécuter le for (;;) en boucle.

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

Parfois, continue est également utilisé comme un espace réservé pour faire un vide corps de boucle plus clair.

for (count = 0; foo.moreData(); count++)
  continue;

Le même énoncé sans étiquette existe aussi en C et C++. En Perl, il est nommé next.

104voto

Gant Points 9920

Nous allons voir un exemple

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

Ce serait d'obtenir la somme de seulement les nombres impairs de 1 à 100

28voto

Vineet Points 984

Si vous pensez que le corps d'une boucle comme une sous-routine, "continue" est une sorte de "return". Le même mot-clé existe dans C, et sert le même but. Voici un exemple artificiel:

for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

Cela permettra d'imprimer uniquement les nombres impairs.

16voto

Tom Dibble Points 51

En général, je vois "continuer" (et "pause") comme un avertissement que le code peut utiliser certains de refactoring, surtout si le "while" ou "pour" boucle de déclaration n'est pas immédiatement en vue. Le même est vrai pour le "retour" au moyen d'une méthode, mais pour une raison légèrement différente.

Comme d'autres l'ont déjà dit, "continuer", se déplace le long de la prochaine itération de la boucle, alors que la "rupture" se déplace à l'extérieur de la boucle englobante.

Ceux-ci peuvent être de l'entretien timebombs car il n'y a pas de lien direct entre la "continuer"/"pause" et la boucle continue/la rupture autre que du contexte; ajouter une boucle interne ou déplacer les "tripes" de la boucle dans une méthode distincte et vous avez un effet caché de la continuer/pause défaut.

À mon humble avis, il est préférable de les utiliser comme une mesure de dernier ressort, et de s'assurer que leur utilisation est regroupé étroitement au début ou à la fin de la boucle, de sorte que la prochaine développeur peut voir les "limites" de la boucle sur un écran.

"continuer", "pause", et "retour" (autre que le seul Vrai Retour à la fin de votre méthode) entrent dans la catégorie générale de "caché GOTOs". Ils ont lieu en boucle et la fonction de contrôle dans des endroits inattendus, qui finalement provoque des bugs.

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