Une fonction ou une classe doit avoir une seule responsabilité bien definie. Ainsi elle est courte, et facile à maintenir et à debugger.
Si je reprend ta fonction dateFormat, on peut la diviser en 2: Une fonction qui convertit le nombre de secondes en un type exploitable en terme d'heure / minutes / secondes. Une fonction qui met cela en forme pour affichage.
Salut, merci des informations et de l'exemple voici le code terminer avec tous vos retours.
#include <iostream>
#include <boost/algorithm/string/predicate.hpp>
#include <sstream>
#include <iomanip>
#include <random>
struct time_s {
int h;
int m;
int s;
};
time_s toTime(int s) {
time_s t1{};
t1.h = s / 3600;
t1.m = s / 60 - t1.h;
t1.s = s - t1.m * 60 - t1.h * 3600;
return t1;
}
static std::string time_sFormat(time_s t) {
std::stringstream ss;
if (t.h > 0)
ss << t.h << " heure" << (t.h > 1 ? "s et " : " et ");
if (t.m > 0)
ss << t.m << " minute" << (t.m > 1 ? "s et " : " et ");
ss << t.s << " seconde" << (t.s > 1 ? "s." : ".");
return ss.str();
}
int main() {
std::string again;
do {
std::cout << "----------[ PlusOuMoins ]----------\n"
<< "Commencement du jeu.\n"
<< "Développé par LEVASSEUR Wesley.\n"
<< "-----------------------------------"
<< std::endl;
std::random_device random_device;
std::default_random_engine random_engine(random_device());
std::uniform_int_distribution<int> uniform_dist(1, 100);
time_t t = std::time(nullptr);
const int r = uniform_dist(random_engine);;
int tr = 0, te;
bool find = false;
std::cout << "debug: " << r << std::endl;
std::cout
<< "CONSOLE » Tentez de trouver le nombre aléatoire entre 0 et 100, dans un court délai et en moins de coups possible."
<< std::endl;
do {
try {
++tr;
std::cin >> te;
if (std::cin.fail()) throw std::runtime_error("Input is not an integer\n");
if (r > te)
std::cout << "CONSOLE » Plus!" << std::endl;
else if (r < te)
std::cout << "CONSOLE » Moins!" << std::endl;
else {
std::cout << "CONSOLE » GAGNEZ!" << std::endl;
std::cout << "CONSOLE » Vous avez mis " << time_sFormat(toTime(std::difftime(time(nullptr), t))) << std::endl;
std::cout << "CONSOLE » En " << tr << " coup" << (tr > 1 ? "s." : ".") << std::endl;
find = true;
}
} catch (const std::runtime_error &e) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "CONSOLE » Veuillez saisir un nombre entier. (Ex: 50)" << std::endl;
}
} while (!find);
do {
std::cout << "CONSOLE » Voulez-vous recommencer le jeu? (Oui / Non)" << std::endl;
std::cin >> again;
std::cin.ignore();
std::cin.clear();
} while (!boost::iequals(again, "oui") && !boost::iequals(again, "non"));
} while (boost::iequals(again, "oui"));
return 0;
}
Je vous remercie de toutes ses informations et aides
Deedolith a écrit:
SRP: Single Responsibility Principle.
Une fonction ou une classe doit avoir une seule responsabilité bien definie. Ainsi elle est courte, et facile à maintenir et à debugger.
Si je reprend ta fonction dateFormat, on peut la diviser en 2: Une fonction qui convertit le nombre de secondes en un type exploitable en terme d'heure / minutes / secondes. Une fonction qui met cela en forme pour affichage.
Recopier mon code, c'est bien, mais c'est pareil pour ta fonction main: Elle à trop de responsabilités (a toi d'analyser lesquelles).
De plus, les erreurs de saisie ne devraient pas être gérées via des exceptions. Une exception est quelque chose dont on ne peut se prémunir (rupture de connexion réseau par exemple). Ce n'est pas le cas pour les saisies, tu as tout le loisir de les vérifier.
Je sais mais mon but est de le faire en une classe et si possible avec le moins de methode.
Qui nous interdit de géré les erreurs de saisie par des exceptions ?
T'en que le programme marche et qui donne le resultré voulu c'est ce qui compte le plus.
Merci de tes réponses.
Deedolith a écrit:
Recopier mon code, c'est bien, mais c'est pareil pour ta fonction main: Elle à trop de responsabilités (a toi d'analyser lesquelles).
De plus, les erreurs de saisie ne devraient pas être gérées via des exceptions. Une exception est quelque chose dont on ne peut se prémunir (rupture de connexion réseau par exemple). Ce n'est pas le cas pour les saisies, tu as tout le loisir de les vérifier.
(1)Je sais mais mon but est de le faire en une classe et si possible avec le moins de methode.
(2)Qui nous interdit de géré les erreurs de saisie par des exceptions ?
(3)T'en que le programme marche et qui donne le resultré voulu c'est ce qui compte le plus.
1) Le but d'un code source n'est pas d'avoir le moins de fonctions. A ce moment, tu n'en fait qu'une seule "fourre-tout" et bon courage pour la suite.
2) Les erreurs de saisie sont contrôlables (et doivent être contrôlées), les exceptions ne sont absolument pas adaptées pour les gérer.
3) C'est une bonne chose si ca fonctionne, mais c'est encore meilleur si c'est: a) Lisible. B) Maintenable. Ce qui nous ramène sur le 1er point, une fonction "fourre-tout" n'est pas lisible, ni maintenable.
(1) Je sais mais mon but est de le faire en une classe et si possible avec le moins de methode.
(2) Qui nous interdit de géré les erreurs de saisie par des exceptions ?
(3) T'en que le programme marche et qui donne le resultré voulu c'est ce qui compte le plus.
(1) Non. Ton but c'est d'apprendre à programmer. En l'occurrence, limiter la taille des fonctions et des classes, c'est une habitude à prendre très tôt.
(2) C'est pas une interdiction. Mais ici c'est juste overkill. Une simple conditionnelle, c'est plein de code en moins et ça donne la même chose à l'exécution. Garde ton code simple.
(3) Non. Ce qui compte le plus, et de loin, c'est que le code soit lisible. Une erreur dans un code lisible, c'est facile à corriger. L'inverse n'est pas vrai.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
---- [ Kane ] ----
git is great because Linus did it, mercurial is better because he didn't.
---- [ Kane ] ----
---- [ Kane ] ----
---- [ Kane ] ----
---- [ Kane ] ----
Architecte logiciel - Software craftsmanship convaincu.
git is great because Linus did it, mercurial is better because he didn't.
Architecte logiciel - Software craftsmanship convaincu.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C