Единственное действительное использование Goto, которое я видел, - это то, которое предоставляется в помощь Delphi.
for I := 0 to something do
begin
for J := 0 to something do
begin
For K := 0 to something do
begin
if SomeCondition then
Goto NestedBreak
end;
end;
end;
NestedBreak:
Хотя Goto можно было бы избежать в этом примере, переместив цикл в локальную функцию и используя EXIT, например. Если подфункция неприемлема, вы все равно можете сделать это:
for I := 0 to something do
begin
for J := 0 to something do
begin
For K := 0 to something do
begin
if SomeCondition then
begin
GottaBreak := True
Break;
end;
end;
if GottaBreak then Break;
end;
if GottaBreak then Break;
end;
Это чуть менее оптимально.
Мне еще предстоит увидеть еще одну ситуацию, когда Гото было бы лучшим решением (или вообще каким-либо хорошим).
Гото само по себе не плохо. Это команда управления потоком, такая же, как EXIT, BREAK или CONTINUE. За исключением того, что другие ограничены конкретными ситуациями и управляются компилятором правильно. (Учитывая сказанное, некоторые программисты, с которыми я говорил, считают, что они столь же вредны, как и Гото, мнение, которое я не разделяю) Гото не ограничен, то, что вы можете с ним сделать, может иметь очень негативные последствия. Во всяком случае, я думаю, что я уже вышел за рамки вопроса. ^ _ ^