Я тоже не фанат goto
, так как это обычно делает код менее читаемым. Однако я считаю, что есть исключения из этого правила (особенно когда речь идет о лексерах и парсерах!)
Конечно, вы всегда можете перенести свою программу в Kleene Normalform, переведя ее в нечто, похожее на ассемблер, а затем написать что-то вроде
int line = 1;
boolean running = true;
while(running)
{
switch(line++)
{
case 1: /* line 1 */
break;
case 2: /* line 2 */
break;
...
case 42: line = 1337; // goto 1337
break;
...
default: running = false;
break;
}
}
(Таким образом, вы в основном пишете виртуальную машину, которая выполняет ваш двоичный код ... где line
соответствует указателю инструкции)
Это гораздо более читабельно, чем код, который использует goto
, не так ли?