149 votes

C’est une mauvaise pratique d’utiliser la pause dans une boucle for ?

Est-ce une mauvaise pratique à utiliser break déclaration à l'intérieur d'un for boucle?

Dites, je suis à la recherche d'une valeur dans un tableau. Comparer à l'intérieur d'une boucle et lorsque la valeur est trouvée, break; à la sortie de la boucle for.

Est-ce une mauvaise pratique? J'ai vu la solution de rechange: définir une variable vFound et attribuez la valeur true lorsque la valeur est trouvée et vérifiez vFound dans la for déclaration de l'état. Mais est-il nécessaire de créer une nouvelle variable pour ce but?

Je fais une demande dans le cadre d'une normale C ou C++ pour la boucle.

P. S: Le MISRA des directives de codage déconseillé d'utiliser la pause.

152voto

smirkingman Points 3117

Non, la rupture est la bonne solution.

Ajout d’une variable booléenne rend le code plus difficile à lire et ajoute une source potentielle d’erreurs.

141voto

e.James Points 51680

Beaucoup de réponses ici, mais je n'ai pas vu ce encore mentionné:

La plupart des "dangers" liés à l'utilisation break ou continue dans une boucle for sont annulés si vous écrivez bien rangé, facilement lisible par les boucles. Si le corps de la boucle s'étend sur plusieurs écran longueurs et a de multiples imbriquée des sous-blocs, oui, vous pouvez facilement oublier que le code ne sera pas exécuté après la pause. Si, toutefois, la boucle est court et au point, le but de l'instruction break devrait être évident.

Si une boucle est devenu trop grand, utiliser un ou plusieurs bien-nommé appels de fonction à l'intérieur de la boucle de la place. La seule vraie raison pour éviter de faire est pour le traitement des goulets d'étranglement.

54voto

Amit S Points 508

Vous pouvez trouver toutes sortes de code professionnel avec instructions « break » dans eux. Il est parfaitement logique de l’utiliser chaque fois que nécessaire. Dans votre cas, cette option vaut mieux que la création d’une variable distincte juste dans le but de sortir de la boucle.

24voto

Nick T Points 5466

Loin d'être une mauvaise pratique, Python (et d'autres langues?) étendue de l' for boucle de la structure d'une partie de celui-ci va seulement être exécuté que si la boucle n'a pas d' break.

for n in range(5):
    for m in range(3):
        if m >= n:
            print 'stop!'
            break
        print m,
    else:
        print 'finished.'

Sortie:

stop!
0 stop!
0 1 stop!
0 1 2 finished.
0 1 2 finished.

Code équivalent sans break et à portée de main else:

for n in range(5):
    aborted = False
    for m in range(3):
        if not aborted:
            if m >= n:
                print 'stop!'
                aborted = True
            else:            
                print m,
    if not aborted:
        print 'finished.'

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