Question

Par souci d'argument, voici un exemple de fonction qui imprime le contenu d'un fichier donné en ligne par ligne.

Version 1:

void printFile(const string & filePath) {
  fstream file(filePath, ios::in);
  string line;
  while (std::getline(file, line)) {
    cout << line << endl;
  }
}

Je sais qu'il est recommandé que les fonctions fassent une chose à un niveau d'abstraction. Pour moi, bien que le code ci-dessus fasse à peu près une chose et est assez atomique.

Certains livres (comme le code propre de Robert C. Martin) semblent suggérer de diviser le code ci-dessus en fonctions distinctes.

Version 2:

void printFile(const string & filePath) {
  fstream file(filePath, ios::in);
  printLines(file);
}

void printLines(fstream & file) {
  string line;
  while (std::getline(file, line)) {
    printLine(line);
  }
}

void printLine(const string & line) {
  cout << line << endl;
}

Je comprends ce qu'ils veulent réaliser (ouvrir le fichier / les lignes de lecture / ligne d'impression), mais n'est-ce pas un peu exagéré?

La version originale est simple et en quelque sorte fait déjà une chose - imprime un fichier.

La deuxième version conduira à un grand nombre de fonctions vraiment petites qui peuvent être beaucoup moins lisibles que la première version.

Ne serait-il pas, dans ce cas, mieux d'avoir le code à un seul endroit?

À quel moment le paradigme «faire une chose» devient-il nocif?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top