Tôi đã thấy điều này rất nhiều trong hệ thống di sản của chúng tôi tại nơi làm việc - các chức năng hoạt động giống như thế này:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Nói cách khác, chức năng có hai phần. Phần đầu tiên thực hiện một số loại xử lý (có khả năng chứa các vòng lặp, tác dụng phụ, v.v.) và trên đường đi, nó có thể đặt cờ "việc cần làm". Phần thứ hai chỉ được thực hiện nếu cờ "việc cần làm" đã được đặt.
Nó có vẻ như là một cách khá xấu xí để làm mọi thứ, và tôi nghĩ rằng hầu hết các trường hợp mà tôi thực sự đã dành thời gian để hiểu, có thể được tái cấu trúc để tránh sử dụng cờ. Nhưng đây có phải là một mô hình chống thực tế, một ý tưởng tồi, hoặc hoàn toàn chấp nhận được?
Tái cấu trúc rõ ràng đầu tiên sẽ là cắt nó thành hai phương pháp. Tuy nhiên, câu hỏi của tôi là về việc có bao giờ cần (bằng ngôn ngữ OO hiện đại) để tạo biến cờ cục bộ hay không, có khả năng đặt nó ở nhiều nơi và sau đó sử dụng nó để quyết định có thực thi khối mã tiếp theo hay không.
["blacklisted-domain","suspicious-characters","too-long"]
cho thấy một số lý do được áp dụng.