goto
(англ. go to – «перейти к») – оператор безусловного перехода к определённой точке программы, обозначенной номером строки либо меткой.
В 1968 году, в своей статье «Обоснование пагубности оператора goto», Эдсгер Дейкстра отметил, что качество кода обратно пропорционально количеству goto
, используемых в коде. Дейкстра утверждал (это просто его мнение), что:
- корректность кода без
goto
доказать легче - код с операторами
goto
трудно форматировать -
goto
влияет на логическую структуру программы - применение
goto
препятствует оптимизации, выполняемой компилятором -
goto
усложняет анализ кода
На практике применение оператора goto, приводит к нарушению принципа хода алгоритма строго сверху вниз.
Сторонники goto
выступают за осторожное применение оператора, при определенных условиях.
Большинство аргументов против goto
, не говорит о полном отказе от этого оператора, а предостерегает от неразборчивого его использования.
Хорошее программирование не означает исключение всех goto
.
Стремление к коду без goto
не должно быть целью.
Десятилетия исследований оператора goto не смогли подтвердить его вредоносность, а теоретические и экспериментальные доводы, выдвигаемые против этого оператора, оказались не убедительными.
И наконец, операторы goto
входят во множество современных языков, одним их которых является C#.
Microsoft часто использует goto
при автогенерации кода, когда этот код не предназначен для восприятия и редактирования человеком. Корректность такого кода определяется корректностью создающего его инструмента.
Использование goto
– это как вопрос религии.
Пример использования goto
:
В данном случае из-за безусловного перехода (строки goto Label;
) будет реализован вечный цикл и программа никогда не завершится, из-за чего это пример не очень хорошего использования данного оператора. Другой пример использования данного оператора в связке с условным оператором:
int counter = 0;
Label:
counter++;
Console.WriteLine("Counter = {0}", counter);
if (counter < 3)
{
goto Label;
}
Console.WriteLine("End");
В данном примере через оператор goto
был реализован цикл, который выполнится три раза. Количество итераций цикла задаётся в условии условной конструкции и данный цикл напоминает собой работу цикла с постусловием.
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №6. ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ".