Replace Control Flag with Break

Removes smells
Symptom

A loop maintaining a boolean flag to decide when to stop; the agent reasoning about termination must track the flag's state through every iteration.

Goal

The exit happens at the moment it's decided via break/return/continue; the agent reads the loop's termination as a direct statement.

Before the refactoring

let found = false;
for (const p of people) {
if (!found && p.name === target) {
matched = p;
found = true;
}
}

After the refactoring

for (const p of people) {
if (p.name === target) {
matched = p;
break;
}
}
Example source: Illustrative example written for this site, not a quotation from any source.
Pressure

The agent must mentally simulate the flag's lifecycle across iterations; bugs hide where the flag isn't set when expected.

Tradeoff

If the loop body is large, the break point becomes hidden inside the body and the agent must scan to find termination; extract a function around the body to keep the exit obvious.

Relief

The agent reads termination as a direct statement at the point of decision; the loop's intent becomes literal.

Trap

Replacing flags with breaks in large loop bodies buries the exit point — the agent must scan the body to find termination, which can be harder than tracking the flag.