作業中のレガシーシステムでこれをよく見ました。次のような機能があります。
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
つまり、関数には2つの部分があります。最初の部分は何らかの処理(ループ、副作用などを含む可能性があります)を実行し、その途中で「todo」フラグを設定します。2番目の部分は、「todo」フラグが設定されている場合にのみ実行されます。
物事を行うのはかなりlyい方法のように思えます。実際に時間をかけて理解したほとんどのケースは、フラグの使用を避けるためにリファクタリングできると思います。しかし、これは実際のアンチパターンであるか、悪いアイデアであるか、それとも完全に受け入れられるものですか?
最初の明らかなリファクタリングは、2つの方法に分割することです。ただし、私の質問は、ローカルフラグ変数を作成し、複数の場所に潜在的に設定し、後でそれを使用して次のコードブロックを実行するかどうかを決定する必要があるかどうか(現代のOO言語)についてです。
["blacklisted-domain","suspicious-characters","too-long"]
、いくつかの理由が当てはまることを示すようなリストで終わるかもしれません。