Goto Или Не Goto, Вот В Чем Вопрос

«Спор возможен там, где истина закрыта.

В бесплодных спорах можно бесконечно обсуждать, что находится в комнате за закрытой дверью.

Но как только дверь откроется, всем станет ясно, и спорить не о чем, лишь бы каждый мог видеть правду».

Владимир Мегре

GOTO или не GOTO, вот в чем вопрос

Статья посвящена П.

М.

Зацепину, выдающемуся инженеру Алтайского государственного университета, под чутким руководством которого многие студенты, в том числе и автор статьи, познали магию инженерного творчества.



Введение

Споры о возможности использования оператора GOTO в программах ведутся уже очень давно (ее официальным началом признана статья Дейкстры «О вреде оператора GOTO», опубликованная в 1968 году [2]).

Через три года мы отметим 50-летие этого спора.

Это хороший повод наконец «расставить все точки над i» и положить конец спору.

Цитата в эпиграфе выбрана не случайно.

Это точно отражает текущую ситуацию в полемике по поводу GOTO. В нашем случае «комната за закрытой дверью» — это понятная каждому постановка проблемы.

Пока, к сожалению, такая постановка проблемы не озвучивалась, поэтому дискуссия продолжается.

Противоборствующие стороны спорят хоть и о схожих, но все же о разных вещах, и поэтому не могут найти компромисс.

Давайте займём нейтральную сторону в этом споре и разберемся беспристрастно.

Давайте рассмотрим аргументы «противников» и «защитников» оператора GOTO и решим, «кто из них прав, а кто нет».



Почему возникают споры?

Как отмечалось выше, споры о возможности использования оператора GOTO в программах связаны с отсутствием понятной всем постановки задачи.

Грубо говоря, одна из сторон доказывает, что дерево плавает, а другая — что кирпич тонет. Естественно, делая такое заявление, каждая сторона уверена в своей правоте и всегда будет ее защищать.

Противники GOTO полагаются на хорошие манеры.

Именно здесь спрятан ключ к «закрытой двери», потому что.

Есть как минимум три правила этикета: «хорошая структура», «хорошая скорость» и «хорошая компактность», но противники GOTO считают только одно.

из них.

Защитники GOTO опираются на требования клиентов, где среди прочего часто встречаются моменты, связанные со скоростью и компактностью программы.

При такой обстановке нельзя использовать одно правило хороших манер; приходится искать компромиссное решение.

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

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

Но это не повод их полностью игнорировать, ведь.

На каждый спрос должно быть предложение.

Изложенная точка зрения весьма поверхностна, поскольку.

не учитывает деталей спора.

Чтобы сформулировать объективную постановку проблемы, необходимо рассмотреть аргументы и контраргументы каждой стороны.

Вот что мы сейчас сделаем.

Жирный шрифт З — это аргументы сторонников GOTO, а жирные буквы п - таковы аргументы противников ГОТО.



Аргументы «противников» GOTO

1. Использование GOTO — плохой тон.

З: Это голословное утверждение, поэтому спорить здесь нет смысла.

2. Худший вариант — вернуться назад с помощью отметки.

З: Действительно, вы не можете использовать GOTO таким образом, как и не можете использовать его для перехода к другому блоку области видимости — вы можете либо остаться в текущем, либо покинуть его.

Если вы будете следовать этим двум правилам, то сможете использовать GOTO. 3. GOTO — избыточный оператор.

Его можно легко заменить циклами и условиями.

З: В этом отношении почти все операторы могут быть исключены из языка.

С точки зрения структурного программирования можно полностью убрать из языка все операторы, оставив только while и оператор присваивания.

[1] В этом случае программы будут объёмными, но понятными.

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

GOTO — это признак не кривизны кода, а кривизны языков, в которых без него иногда невозможно (C, C++, C#, Pascal, Java и т. д.) и кривизны ненормативной лексики, называемой « структурное программирование» с его т.н.

«циклы с предусловиями», «циклы с постусловиями» и «ветвления», которые являются не элементарными конструкциями, а типичными шаблонами, в которые задача не всегда укладывается комфортно.

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

4. Вирт и Дейкстра говорят, что GOTO — это плохо.

[2, 3] З: Авторитетные мнения достойны внимания, но то, что говорят авторитеты, не является истиной в последней инстанции.

Недаром в научном сообществе бытует фраза: «Если уважаемый учёный говорит, что «это можно сделать», то он, скорее всего, прав, а если он говорит, что «это невозможно сделать», то он скорее всего, это неправильно».

Есть также авторитеты, которые высказываются в пользу GOTO, например, Дональд Кнут [4], Фредрик Брукс.

[5] Но при решении проблемы целесообразнее полагаться не на мнение авторитетов, а на здравый смысл.

5. GOTO делает недействительными многие возможности компилятора по оптимизации управляющих структур, что делает код медленнее и объемнее.

[2] З: Эта проблема никак не связана с GOTO, поскольку оптимизация выполняется на уровне машинного кода.

Да, GOTO вставляет в машинный код инструкцию перехода, что предотвращает оптимизацию кода, но одни и те же инструкции вставляют как условные операторы, так и операторы цикла.



Аргументы «защитников» ГОТО

1. Группа взаимоисключающих условий.

Образец кода.

   

if(objectA.nValue == objectB.nValue) {

Теги: #психология программирования #философия программирования #Алгоритмы #переход существует #Идеальный код #Алгоритмы
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.