Partage
  • Partager sur Facebook
  • Partager sur Twitter

Magic numbers et variables

Sujet résolu
    27 août 2021 à 21:33:14

    Salut, je débute en C#, et voilà :

    Pour donner un exemple, ce code (il manque des choses mais c'est pour simplifier) :

                    foreach (string sourceFilePath in openFileDialogScript.FileNames)
                    {
                        Directory.CreateDirectory(DEST_DIR_PATH);
                        if (File.Exists(Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath))))
                        {
                            if (MessageBox.Show($"{Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath)))} existe déjà. Remplacer le fichier ?", "Erreur", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                                File.Copy(sourceFilePath, Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath))), true);
                            else
                                continue;//Passer l'élément actuel car l'utilisateur ne souhaite pas le remplacer
                        }
                        else
                            File.Copy(sourceFilePath, Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath))));
                        }



    Est-il meilleur que ce code :

                    foreach (string sourceFilePath in openFileDialogScript.FileNames)
                    {
                        string destinationFilePath = Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath)));
                        
                        Directory.CreateDirectory(DEST_DIR_PATH);
                        if (File.Exists(destinationFilePath))
                        {
                            if (MessageBox.Show($"{destinationFilePath} existe déjà. Remplacer le fichier ?", "Erreur", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                                File.Copy(sourceFilePath, destinationFilePath), true);
                            else
                                continue;//Passer l'élément actuel car l'utilisateur ne souhaite pas le remplacer
                        }
                        else
                            File.Copy(sourceFilePath, destinationFilePath);
                        }



     dans quels circonstances, sachant qu'il faut une variable en plus?

    Quelles sont les différences en terme de maintenabilité, lisibilité et performances du code?



    -
    Edité par Scover 27 août 2021 à 21:37:04

    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2021 à 11:29:31

      Sans mesures, la performance n'est rien.

      On s'en cogne de la performance. Dans l'absolue, ça veut RIEN dire.

      Et pour la variable "en plus", l'optimiseur est là pour ça, et il se privera pas d'utiliser une "variable" (un registre) même si vous avez l'idée débile de ne pas factoriser correctement votre code.

      Pour la maintenabilité/lisibilité, restez "DRY" :

      bool checkCopyFilePrecondition(string destinationFilePath)
      {
          bool retVal = File.Exists(destinationFilePath) ? (MessageBox.Show($"{destinationFilePath} existe déjà. Remplacer le fichier ?", "Erreur", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) : true;
      
          return retVal;
      }
      
      ...
      
      foreach (string sourceFilePath in openFileDialogScript.FileNames)
      {
          string destinationFilePath = Path.Combine(DEST_DIR_PATH, Path.GetFileName(sourceFilePath)));
          bool copyFile = checkCopyFilePrecondition(destinationFilePath);
      
          if(copyFile){
              Directory.CreateDirectory(DEST_DIR_PATH);// bof, vérifiez qu'il n'existe pas une option de File.Copy qui gère ça directement
              File.Copy(sourceFilePath, destinationFilePath, true);
          }
      }



      -
      Edité par bacelar 31 août 2021 à 11:30:04

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

      Magic numbers et variables

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown