Saya sudah sering melihat ini di sistem lawas kami di tempat kerja - fungsi-fungsi yang seperti ini:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Dengan kata lain, fungsinya memiliki dua bagian. Bagian pertama melakukan semacam pemrosesan (berpotensi mengandung loop, efek samping, dll.), Dan sepanjang jalan itu mungkin mengatur bendera "todo". Bagian kedua hanya dieksekusi jika bendera "todo" telah ditetapkan.
Sepertinya cara yang sangat jelek untuk melakukan sesuatu, dan saya pikir sebagian besar kasus yang saya benar-benar luangkan waktu untuk mengerti, bisa di refactored untuk menghindari penggunaan bendera. Tetapi apakah ini sebenarnya anti-pola, ide yang buruk, atau dapat diterima?
Refactorisasi pertama yang jelas adalah memotongnya menjadi dua metode. Namun, pertanyaan saya lebih lanjut tentang apakah ada kebutuhan (dalam bahasa OO modern) untuk membuat variabel flag lokal, berpotensi mengaturnya di beberapa tempat, dan kemudian menggunakannya untuk memutuskan apakah akan menjalankan blok kode berikutnya.
["blacklisted-domain","suspicious-characters","too-long"]
itu yang menunjukkan bahwa beberapa alasan diterapkan.