En C ++, est-ce une mauvaise pratique de créer des blocs de code à l'intérieur de certaines fonctions, telles que les suivantes:
bool f()
{
{
double test = 0;
test = // some other variable outside this function, for example.
if (test == // some value)
return true;
}
{
double test = 0;
test = // some variable outside this function, different from the last one.
if (test == // some value)
return true;
}
return false;
}
Le but de cela serait d'utiliser plusieurs fois le même nom de variable de "test", pour le même type de procédure. Dans mon projet, j'ai plusieurs variables et j'effectue plusieurs tests. Je ne veux pas vraiment continuer à créer de nouvelles variables avec des noms différents pour chacun des tests, étant donné la similitude des tests.
Est-ce une mauvaise pratique d'insérer des blocs de code afin que les variables sortent du champ d'application après chaque test, puis-je utiliser à nouveau leurs noms? Ou devrais-je chercher une autre solution? Il convient de noter que j'ai envisagé d'utiliser le même ensemble de variables pour tous mes tests (et de les mettre tous à 0 après la fin de chaque test), mais j'avais l'impression que cela pouvait être une mauvaise pratique.
la source
Réponses:
Les blocs sont parfaitement raisonnables si vous les utilisez pour étendre certaines ressources. Fichiers, connexions réseau, allocations de mémoire, transactions de base de données, etc. Dans ces cas, le bloc fait en fait partie de la structure logique du code: vous générez une ressource, elle existe pour une certaine période de temps, puis elle disparaît à une heure désignée.
Mais si tout ce que vous faites est de délimiter un nom , je dirais que c'est une mauvaise pratique. De manière générale, bien sûr; des circonstances spéciales peuvent s'appliquer.
Par exemple, si cette fonction a été générée par un système de génération de code, un framework de test ou similaire, alors les blocs pour la portée du nom sont une chose raisonnable. Mais vous parleriez de code écrit dans le but d'une machine, pas d'un humain.
Si un humain écrit du code où il doit réutiliser des noms dans la même fonction, je dirais que ces blocs doivent probablement être des fonctions distinctes. Surtout si ces noms sont utilisés avec différents types et / ou sens dans ces blocs.
la source
Ce n'est pas une mauvaise pratique de créer des blocs comme celui-ci. C'est ainsi que fonctionnent les étendues.
Habituellement, cela se fait lorsque vous utilisez RAII (l'acquisition de ressources est l'initialisation) et vous souhaitez contrôler le moment où les destructeurs sont appelés.
Si cela devient long, j'envisagerais de déplacer ce code vers sa propre fonction.
À mon avis, l'utiliser uniquement pour recycler les noms de variables n'est pas une bonne idée. Mais je peux voir que cela a été utile dans les cas où la mémoire est faible
la source