In a recent article, Andrew Koenig argues that break statements are harmful because they make it harder to deduce the program context at loop termination. For instance, given:
while (n != 0) { /* do something */ }n can be assumed to be zero at loop termination unless there is a break within it. Koenig proposes two different approaches to alleviating this problem:- Include the program context at the
breakstatement as a possible value for the program context at loop termination. - Force the loop termination condition just before
breaking.
There is another alternative: exclude the loop termination condition from the evaluable program context. Here is a way to do that:
for (int local_n = n; local_n != 0;) { /* do something with local_n */ }As the scope of
local_n does not extend outside the loop, program context after loop termination does not depend on the termination procedure. A cruder, but also more flexible way to do the same is the following:{
int local_n = n;
while (local_n != 0) { /* do something with local_n */ }
}The somewhat unexpected surrounding braces are a conspicuous reminder that local_n does not form part of the global program state.
Por eso está bien los lenguajes que tiene foreach
ReplyDelete