Урок 6. Оператор безусловного перехода (goto)

goto (англ. go to – «перейти к») – оператор безусловного перехода к определённой точке программы, обозначенной номером строки либо меткой.

В 1968 году, в своей статье «Обоснование пагубности оператора goto», Эдсгер Дейкстра отметил, что качество кода обратно пропорционально количеству goto, используемых в коде. Дейкстра утверждал (это просто его мнение), что:

  • корректность кода без goto доказать легче
  • код с операторами goto трудно форматировать
  • goto влияет на логическую структуру программы
  • применение goto препятствует оптимизации, выполняемой компилятором
  • goto усложняет анализ кода

На практике применение оператора goto, приводит к нарушению принципа хода алгоритма строго сверху вниз.

Сторонники goto выступают за осторожное применение оператора, при определенных условиях.

Большинство аргументов против goto, не говорит о полном отказе от этого оператора, а предостерегает от неразборчивого его использования.

Хорошее программирование не означает исключение всех goto.

Стремление к коду без goto не должно быть целью.

Десятилетия исследований оператора goto не смогли подтвердить его вредоносность, а теоретические и экспериментальные доводы, выдвигаемые против этого оператора, оказались не убедительными.

И наконец, операторы goto входят во множество современных языков, одним их которых является C#.

Microsoft часто использует goto при автогенерации кода, когда этот код не предназначен для восприятия и редактирования человеком. Корректность такого кода определяется корректностью создающего его инструмента.

Использование goto – это как вопрос религии.

Пример использования goto:

2

В данном случае из-за безусловного перехода (строки goto Label;) будет реализован вечный цикл и программа никогда не завершится, из-за чего это пример не очень хорошего использования данного оператора. Другой пример использования данного оператора в связке с условным оператором:

   int counter = 0;

Label:
   counter++;
   Console.WriteLine("Counter = {0}", counter);

   if (counter < 3)
   {
       goto Label;
   }

Console.WriteLine("End");

В данном примере через оператор goto был реализован цикл, который выполнится три раза. Количество итераций цикла задаётся в условии условной конструкции и данный цикл напоминает собой работу цикла с постусловием.

Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №6. ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ".

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202