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

Langages de programmation Discussion :

Question sur la bonne pratique en programmation pour les boucles


Sujet :

Langages de programmation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 785
    Par défaut Question sur la bonne pratique en programmation pour les boucles
    Bonsoir,
    J'ai une question un peu bête sur les bonnes pratiques en programmation et c'est un peu du pinaillage mais bon. Je code en ce moment en CSharp et je dois souvent faire des bouclages de tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i=0 ; i<=worldSize.x-1 ; i++)
    {
           //
    }
    La question porte sur "worldSize.x-1" a savoir si ça n'a pas d'importance de le mettre comme ça ou si c'est plus efficace de l'initialiser dans une variable avant? Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int size_x = worldSize.x-1;
    
    for (int i ; i<=size_x ; i++)
    {
           //
    }
    Oui je sais c'est pas grandiose comme question^^, mais je me pose la question depuis tellement longtemps.

    Bonne soirée,

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 38
    Par défaut
    Dans le premier cas worldSize.x - 1 est calculé à chaque itération de ta boucle. Donc, ça fait du temps de calcul.

    Dans le secong cas, worldSize.x - 1 n'est calculé qu'une seule fois.

    Sur de petites boucles, ce n'est pas très important l'une ou l'autre. Sur plusieurs millions d'itérations, cela peut te faire gagner du temps de prendre la seconde solution.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 313
    Par défaut
    pierre-y :

    Comme déjà dit, avec la première écriture, worldSize.x-1 risque d'être recalculé à chaque itération, encore qu'un compilateur moderne devrait être capable de s'apercevoir que worldSize.x est invariant, et ne faire le calcul qu'une fois.
    La seconde solution introduit une nouvelle variable, ce n'est pas particulièrement clair et élégant.

    J'aurais écrit :
    for (i = 0; i < worldSize.x; i++)
    ...

    Après, c'est une question de goûts et d'habitudes, d'autres n'aiment pas non plus cette écriture parce que l'indice worldSize.x figurant dans la définition de la boucle n'est jamais atteint.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 776
    Par défaut
    Dans pas mal de langages, tu as des itérateurs et des boucles de type for-each (range en Python, par exemple). Pour moi, ça serait le meilleur style à employer ici. Surtout que, apparemment, ça existe en C# (http://stackoverflow.com/questions/5...-integer-range).

    Dans un autre langage, Julia, on a même une fonction pour itérer sur tous les index d'un tableau : eachindex().

    Ces deux techniques donneraient ça en Julia :

    Code julia : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i in 1:worldSize.x
        # ...
    end
     
    for i in eachindex(worldSize)
        # ...
    end

    Par contre, réfléchir en termes d'optimisation du compilateur, pour moi, ce n'est tout simplement pas important dans la plupart des applications — sans oublier qu'un compilateur moderne est très intelligent.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 785
    Par défaut
    Merci pour tout ces avis.

    Après, c'est une question de goûts et d'habitudes, d'autres n'aiment pas non plus cette écriture parce que l'indice worldSize.x figurant dans la définition de la boucle n'est jamais atteint.
    Et ça peut poser probleme que worldSize.x ne soit jamais atteint?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 313
    Par défaut
    Et ça peut poser probleme que worldSize.x ne soit jamais atteint?
    Absolument aucun, c'est juste éventuellement une question de lisibilité.

    for (i = 0; i < worldSize.x; i++)
    ...
    est bien équivalent à :
    for (i = 0; i <= worldSize.x-1; i++)
    ...

    En ce qui me concerne, je préfère la "sobriété" de la première forme, mais on peut aussi considérer que la seconde est plus lisible, parce qu'on voit directement que i varie de 0 à worldSize.x-1 inclus.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 785
    Par défaut
    Merci pour ces précision. Bonne soirée,

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    On peut aussi considérer que la première forme est plus lisible, car plus utilisée et donc plus "attendue": Pratiquement personne n'utilise la seconde forme, ce qui cause une "pause" dans la lecture du code par un être humain.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Ouvrage sur les bonnes pratiques de programmation en Java?
    Par Invité dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 11/07/2011, 12h05
  2. Réponses: 5
    Dernier message: 30/09/2010, 17h46
  3. Tutorial bonne pratique du programmation avec JAVA
    Par menzlitsh dans le forum Langage
    Réponses: 10
    Dernier message: 02/07/2007, 12h56
  4. Question sur la bonne façon de faire un JMenuBar
    Par bit_o dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2007, 11h26
  5. Aide sur choix de langage de programmation pour PC et Mac
    Par benouille69 dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 11/11/2006, 19h30

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