IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Best Practices : "Avoid assigning loop control variables in the body of for loops"


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut Best Practices : "Avoid assigning loop control variables in the body of for loops"
    Bonjour,
    je me pose une question sur ce warning obtenu (après analyse de code via Eclipse suivant les J2SE Best Practices) pouvant apparaître sur des codes du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		boolean done = false;
    		int[] arr = new int[50];
    		arr[25] = 12;
    		for (int i = 0; i < arr.length && done == false; i++) {
    			if(arr[i] == 12)	{
    				done = true;
    			}
    		}
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		UnObjet obj = null;
    		String unNomDObjet = "nom";
    		for (int i = 0; i < UneListeDObjets.size() && obj == null; i++) {
    			if(UneListeDObjets.get(i).getName().equals(unNomDObjet))	{
    				obj = UneListeDObjets.get(i);
    			}
    		}

    Savez-vous quels pourraient être les problèmes engendrés par ce type d'affectation dans le corps d'une boucle ? car là je ne vois pas. (Les warning sont sur les affectations de 'done' et de 'obj' dans les boucles)
    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est juste que ce n'est pas très clair.

    "C'est bon j'ai fini mon travail, alors pour le montrer j'affecte une valeur à cette variable"
    => O_o quoi ?
    Et puis ça fait deux conditions au lieu d'une pour continuer la boucle, ce qui n'est pas super clair non plus.

    Pas clair, et une nécessité de maintenir une logique sur une variable à deux endroits distincts. Tout cela encourage des bugs à apparaître quand le code évolue et se fait modifier.

    Quand on veut terminer une boucle, on fait break ou return. C'est en tout cas ce que veut dire ton outil.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0; i < arr.length && done == false; i++) {
    			if(arr[i] == 12)	
    				done = true;
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0; i < arr.length && arr[i] != 12; i++) ;
    de toutes façons, la boucle ne sert à rien puisqu'aucune info n'en sort, donc en fait tout cela est équivalent à

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    @thelvin :
    Merci, je comprends ce que tu veux dire. En plus ça ajoute effectivement un test à chaque itération

    @BenWillard :
    J'avoue, l'exemple 1 était un peu bidon mais ce que tu dis semble faux car ça pourrait être un algo de présence ou non de la valeur 12 dans un tableau.

  5. #5
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Ah oui c'est vrai qu'il y a "done" qui peut avoir un état différent selon qu'on a trouvé ou non. Mais alors il doit s'appeller "found".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Best Practice] Control2d dans 3d : garder les proportions du controle 2d
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 24/09/2009, 16h34
  2. Controle variable a undefined
    Par krfa1 dans le forum ASP
    Réponses: 4
    Dernier message: 15/11/2005, 12h28
  3. Erreur "For loop variable simple local varaible"
    Par Yepazix dans le forum Langage
    Réponses: 13
    Dernier message: 17/09/2005, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo