Ich habe dies in unserem Legacy-System bei der Arbeit viel gesehen - Funktionen, die ungefähr so aussehen:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Mit anderen Worten, die Funktion besteht aus zwei Teilen. Der erste Teil führt eine Art von Verarbeitung durch (die möglicherweise Schleifen, Nebenwirkungen usw. enthält) und setzt dabei möglicherweise das "todo" -Flag. Der zweite Teil wird nur ausgeführt, wenn das Flag "todo" gesetzt ist.
Es scheint ein ziemlich hässlicher Weg zu sein, Dinge zu tun, und ich denke, die meisten Fälle, für die ich mir Zeit genommen habe, um sie zu verstehen, könnten überarbeitet werden, um die Verwendung der Flagge zu vermeiden. Aber ist das wirklich ein Gegenmuster, eine schlechte Idee oder vollkommen akzeptabel?
Die erste offensichtliche Umgestaltung wäre, es in zwei Methoden zu schneiden. In meiner Frage geht es jedoch eher darum, ob es jemals erforderlich ist (in einer modernen OO-Sprache), eine lokale Flag-Variable zu erstellen, die möglicherweise an mehreren Stellen gesetzt und später verwendet wird, um zu entscheiden, ob der nächste Codeblock ausgeführt werden soll.
["blacklisted-domain","suspicious-characters","too-long"]
, die zeigt, dass mehrere Gründe zutrafen.