Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 189 190 191 192 193 194 < 195 > 196 197 198 199 200 201 .. 426 >> Следующая

употребление. Большинство аргументов против goto говорит
именно о неразборчивом его использовании. Дискуссия о goto
вспыхнула, когда Fortran был наиболее популярным языком.
Fortran не имел приличных циклов, и в отсутствие хорошего
совета по поводу создания цикла с помощью goto программисты
написали кучу спагетти-кода. Такой код, несомненно, кор-
релировал с выпуском низкокачественных программ, но это имело
отдаленное отношение к аккуратному использованию goto,
позволяющему заполнить пробел в возможностях, предоставляемых
современными языками программирования.
Правильно расположенный goto способен помочь избавиться от
дублирования кода. Такой код создает проблемы, если две его
части модифицируются по-разному Дублированный код увеличивает
размер исходного и выполняемого файлов. Отри-
ГЛАВА 17 Нестандартные управляющие структуры
391
дательный эффект применения goto перевешивается недостатками
дублированного кода.
Оператор goto может пригодиться в методе, который сна- |fcpe^e^0n^
чала распределяет ресурсы, выполняет с ними какие-то one- НИЙ
ущщдрн д^о $ коде, "с-
рации, а потом освобождает эти ресурсы. Используя goto, вы
тшьзукщш ресурсы, ем.
ниже
можете выполнять очистку в одном месте. Оператор goto
*щраэдеал "Обработка
ошибок и
уменьшает вероятность того, что вы забудете освободить
операторы^". Об
исшнениях
ресурсы при обнаружении ошибки. ^
Порой goto позволяет создать более быстрый и короткий код.
Вышеупомянутая статья Кнута 1974 года рассматривает несколько
вариантов, в которых goto дает ощутимое преимущество.
Хорошее программирование не означает исключение всех goto.
Систематическая декомпозиция, усовершенствование и разумный
выбор управляющих структур обычно автоматически приводит к
программам, не содержащим goto. Стремление к коду без goto -
это не цель, а результат, и бесполезно заострять внимание ис-
ключительно на устранении goto.
Десятилетия исследований операторов goto не смогли про- фшы
шттьСщт 0
демонстрировать их вредоносность. В обзоре литературы m
намеренно хаотичная
Б.А. Шейл (В.А. Sheil) сделал вывод, что нереалистичные тес-
управляющая структура
ухудша-
товые условия, плохой анализ данных и неубедительные ре- вт
производитеяьность [програю*
зультаты не подкрепляют заявления Шнейдермана и др., что ^ти
эксперименты не
- предоставили
практически ни-
число ошибок в коде пропорционально количеству goto какого
доказательства полезна
(1981). Шейл не зашел так далеко, чтобы утверждать, что ис-
го эффекта какого-то
конкрет-
пользование goto - хорошая идея, он лишь показал, что эк-
него способа
структурирования
спериментальные данные против этих операторов неубеди-
управляющей логики*
тельны. &Л" Шейл
И, наконец, операторы goto входят во множество современных
языков, включая Visual Basic, C++ и Ada - наиболее тщательно
продуманный язык программирования в истории. Ada создавался
уже после того, как были приведены все аргументы с обеих
сторон дискуссии по goto, и после всестороннего рассмотрения
вопроса разработчики Ada решили включить в него goto.
Воображаемая дискуссия по поводу goto
Отличительная особенность большинства обсуждений goto -
поверхностность. Спорщик, утверждающий, что "goto - это зло",
приводит тривиальный фрагмент кода, содержащий операторы goto,
а затем показывает, как легко его можно переписать без goto.
Это доказывает главным образом то, что тривиальный код можно
легко написать и без goto.
Спорщик, утверждающий: "Я не могу жить без goto", - обычно
приводит случай, в котором исключение goto выливается в
дополнительное сравнение или дублирование кода. Это доказывает
в основном то, что есть случаи, в которых goto позволяет
выполнить на одно сравнение меньше - незначительная выгода для
современных компьютеров.
392 ЧАСТЬ IV Операторы
Большинство учебников также не помогает. Они приводят простой
пример переписывания некоторого кода без goto, как будто это
все объясняет. Вот обманчивый пример тривиального фрагмента
кода из такого учебника:
Пример кода, который должен легко переписываться без goto
(C++)
do {
GetData( inputFile, data ); if ( eof( inputFile ) ) { goto
L00P_EXIT;
}
DoSomething( data );
} while ( data != -1 );
LOOP.EXIT:
Книга быстро заменяет этот фрагмент кодом без goto:
Пример предположительно эквивалентного кода, переписанного без
goto (C++)
GetData( inputFile, data );
while ( ( !eof( inputFile ))&&(( data != -1 ) ) ) {
DoSomething( data );
GetData( inputFile, data )
}
Этот так называемый "простой" пример содержит ошибку. В
случае, когда переменная data равна -i, преобразованный код
отслеживает -1 и выходит из цикла до выполнения DoSomethingQ.
Исходный код выполняет DoSomethingO до того, как -1
обнаружена. Автор книги по программированию, пытаясь показать,
как легко можно кодировать без goto, преобразовал собственный
же пример некорректно. Но ему не стоит расстраиваться - другие
книги содержат похожие ошибки. Даже профессионалы сталкиваются
Предыдущая << 1 .. 189 190 191 192 193 194 < 195 > 196 197 198 199 200 201 .. 426 >> Следующая