Disons que vous avez une méthode très longue, comme ceci:déclarations de retour lorsque vous faites Extrait Méthode
int monster()
{
int rc = 0;
// some statements ...
if (dragonSlayer.on_vacation()) {
cout << "We are screwed!\n";
if (callTheKing() == true)
return 1;
else
return 2;
} else {
cout << "We are saved!\n";
slayTheDragon();
}
// rest of long method...
return rc;
}
et je travaille sur squelettisation le code. Je veux extraire la partie de dragon à terrassant
int handleDragon() {
if (dragonSlayer.on_vacation()) {
cout << "We are screwed!\n";
if (callTheKing() == true)
return 1;
else
return 2;
} else {
cout << "We are saved!\n";
slayTheDragon();
}
return 0; // ?
}
et remplacer le code monstre() avec un appel à handleDragon().
Mais il y a un problème. Il y a une déclaration de retour au milieu de cette partie. Si je garde la partie où le code retour de handleDragon() est géré, il gardera la litière dans la grosse méthode. En plus des exceptions, existe-t-il un moyen élégant et sûr de refactoriser ce morceau de code par la méthode monstre? Comment ces types de situations devraient-ils être traités?
Si vous allez comparer les booléens avec 'true' comme ça, alors notez que' callTheKing() == true' est aussi un booléen. Cela devrait donc être '(callTheKing() == true) == true'. –
Plus sérieusement, si vous utilisez des valeurs de retour plutôt que des exceptions, vous avez besoin d'un schéma cohérent. Ici vous avez une fonction retournant 'int' (avec zéro pour le succès) et d'autres (apparemment) retournant' bool' (avec zéro pour l'échec). Vous demandez simplement quelqu'un pour mélanger les deux régimes. –