阅读代码不应该像阅读侦探书(总是需要弄清楚)......
一个例子:
爪哇:
iterate_rows:
for (int i = 0; i < maxi; ++i)
{
for (int j = 0; j < maxj; ++j)
{
if (i == 4 < maxi && j == 3 < maxj)
break iterate_rows;
else
continue iterate_rows;
}
}
您无需弄清楚 break iterate_rows 做了什么,您只需阅读即可。
C++:
//iterate_rows:
for (int i = 0; i < maxi; ++i)
{
for (int j = 0; j < maxj; ++j)
{
if (i == 4 < maxi && j == 3 < maxj)
goto break_iterate_rows;
else
goto continue_iterate_rows;
}
continue_iterate_rows:;
}
break_iterate_rows:;
goto break_iterate_rows只是break iterate_rows的可见版本
如果您将 goto 和标签的使用仅限于此类代码,您将无法弄清楚其意图。限制在这种代码上使用 goto 和标签将使您只阅读代码,而不是分析或弄清楚它。你不会被指责为邪恶的程序员。
如果你真的在这种代码中限制你的 goto,你将能够养成不需要弄清楚那些该死的 goto 在你的代码中做了什么的习惯。额外的好处是您不必引入布尔值并跟踪它们(恕我直言,这会导致您检测代码,使其有点不可读,这违背了避免 goto 的目的)
附言
将这些标签与注释配对(在循环之前),当您阅读这些带有 goto 语句的行时,您已经知道这些 goto 的意图