Ist es in C ++ nicht üblich, Codeblöcke in einer Funktion zu erstellen, z.
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;
}
Dazu müsste derselbe Variablenname von "test" mehrmals für dieselbe Art von Prozedur verwendet werden. In meinem Projekt habe ich mehrere Variablen und führe mehrere Tests durch. Ich möchte nicht immer neue Variablen mit unterschiedlichen Namen für jeden der Tests erstellen, wenn man bedenkt, wie ähnlich die Tests sind.
Ist es eine schlechte Praxis, Codeblöcke einzufügen, damit die Variablen nach jedem Test den Gültigkeitsbereich verlassen und ich ihre Namen wieder verwenden kann? Oder soll ich eine andere Lösung suchen? Es sollte beachtet werden, dass ich in Betracht gezogen habe, für alle meine Tests denselben Variablensatz zu verwenden (und sie nach jedem Test auf 0 zu setzen), aber ich hatte den Eindruck, dass dies eine schlechte Praxis sein könnte.
quelle
Antworten:
Blöcke sind absolut vernünftig, wenn Sie sie verwenden, um Ressourcen einzuschränken. Dateien, Netzwerkverbindungen, Speicherzuordnungen, Datenbanktransaktionen, was auch immer. In diesen Fällen ist der Block tatsächlich Teil der logischen Struktur des Codes: Sie erzeugen eine Ressource, sie existiert für einen bestimmten Zeitraum und verschwindet dann zu einem festgelegten Zeitpunkt.
Aber wenn Sie nur einen Namen nennen , würde ich sagen, dass es sich um eine schlechte Übung handelt. Im Allgemeinen natürlich; besondere Umstände können zutreffen.
Wenn diese Funktion beispielsweise von einem Codegenerierungssystem, einem Testframework oder dergleichen generiert wurde, sind Blöcke zum Zweck des Namensumfangs eine sinnvolle Sache. Aber Sie würden über Code sprechen, der für den Zweck einer Maschine geschrieben wurde, nicht für einen Menschen.
Wenn ein Mensch Code schreibt, in dem er Namen innerhalb derselben Funktion wiederverwenden muss, würde ich sagen, dass diese Blöcke wahrscheinlich separate Funktionen sein müssen. Insbesondere, wenn diese Namen mit unterschiedlichen Typen und / oder Bedeutungen in diesen Blöcken verwendet werden.
quelle
Es ist keine schlechte Praxis, solche Blöcke zu erstellen. So funktionieren Oszilloskope.
Normalerweise geschieht dies bei Verwendung von RAII (Resource Acquisition is Initialization) und Sie möchten steuern, wann die Destruktoren aufgerufen werden.
Wenn es lang wird, würde ich erwägen, diesen Code in seine eigene Funktion zu verschieben.
Meiner Meinung nach ist es keine gute Idee, nur Variablennamen zu recyceln. Aber ich kann sehen, dass es in Fällen mit wenig Arbeitsspeicher nützlich war
quelle