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

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

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

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

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

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

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

использовать new для создания объектов в куче, чем позволять
компилятору генерировать автоматические объекты в стеке.
Не используйте рекурсию для факториалов и чисел Фибоначчи Одна
из проблем с учебниками по вычислительной технике в том, что
они предлагают глупые примеры рекурсии. Типичными примерами
являются вычисление факториала или последовательности
Фибоначчи. Рекурсия - мощный инструмент, и очень глупо
использовать ее в этих двух случаях. Если бы программист,
работающий у меня, применял рекурсию для вычисления
факториала, я бы нанял кого-то другого. Вот рекурсивная версия
вычисления факториала:
ГЛАВА 17 Нестандартные управляющие структуры
389
Пример неправильного решения: вычисления факториала с помощью
рекурсии (Java)
int Factorial( int number ) { if ( number == 1 ) { return 1;
}
else {
return number * Factonal( number - 1 );
}
}
He считая медленного выполнения и непредсказуемого
использования памяти, рекурсивный вариант функции трудней для
понимания, чем итеративный вариант:
Пример правильного решения: использование итераций для
вычисления факториала (Java:)
int Factorial( int number ) { int intermediateResult = 1;
for ( int factor = 2; factor <= number; factor++ ) {
intermediateResult = intermediateResult * factor;
}
return intermediateResult;
}
Из этого примера можно усвоить три урока. Первый: учебники по
ВычТеху не оказывают миру услугу своими примерами рекурсии.
Второй, и более важный: рекурсия - гораздо более мощный
инструмент, чем можно предположить из сбивающих с толку
примеров расчета факториала и чисел Фибоначчи. Третий - самый
важный: вы должны рассмотреть альтернативные варианты перед
использованием рекурсии. Иногда один способ работает лучше,
иногда - другой. Но прежде чем выбрать какой-то один, надо
рассмотреть оба.
17.3. Оператор goto
Вы могли думать, что дебаты вокруг goto утихли, но короткая
экскурсия по современным репозиториям исходного кода,
http://cc2e.com/1785
таким как SourceForge.net, показывает, что goto все еще жив-
здоров и глубоко укоренился на сервере вашей компании. Более
того, современные эквиваленты обсуждения goto до сих пор
возникают под разными личинами, включая дебаты о множественных
возвратах из методов, множественных выходах из цикла,
именованных выходах из цикла, обработке ошибок и исключений.
Аргументы против goto
Основной аргумент против goto состоит в том, что код без goto
- более качественный. Знаменитое письмо Дейкстры "Go То
Statement Considered Harmful" ("Обоснование пагубности
оператора go to") в мартовском номере "Communications of the
ACM" 1968 г. положило начало дискуссии. Дейкстра отметил, что
качество кода
390 ЧАСТЬ IV Операторы
обратно пропорционально количеству goto, использованных
программистом. В последующих работах Дейкстра утверждал, что
корректность кода, не содержащего goto, доказать легче.
Код с операторами goto трудно форматировать. Для демонстрации
логической структуры используются отступы, a goto влияет на
логическую структуру. Однако использовать отступы, чтобы
показать логику goto и места его перехода, сложно или даже
невозможно.
Применение goto препятствует оптимизации, выполняемой
компилятором. Некоторые виды оптимизации зависят от порядка
выполнения нескольких выражений подряд. Безусловный переход
goto усложняет анализ кода и уменьшает возможность оптимизации
кода компилятором. Таким образом, даже если применение goto
увеличивает эффективность на уровне исходного кода, суммарный
эффект из-за невозможности оптимизации может уменьшиться.
Сторонники операторов goto иногда приводят довод, что они
делают программу быстрее и проще. Но код, содержащий goto,
обычно не самый быстрый и короткий из всех возможных.
Изумительная классическая статья Дональда Кнута "Structured
Programming with go to Statements" ("Структурное
программирование и операторы go to") содержит несколько
примеров, в которых применение goto приводит к более
медленному и объемному коду (Knuth, 1974).
На практике применение операторов goto приводит к нарушению
принципа, что нормальный ход алгоритма должен быть строго
сверху вниз. Даже если goto при аккуратном использовании не
сбивают с толку, как только они появляются, они начинают
распространяться по коду, как термиты по разрушающемуся дому.
Если разрешен хотя бы один goto, вместе с пользой в код
проникает и вред, так что лучше вообще запретить использование
этого оператора.
В целом опыт двух десятилетий, прошедших с публикации письма
Дейкстры показал всю недальновидность создания кода,
перегруженного операторами goto. В своем обзоре литературы Бен
Шнейдерман (Ben Shneiderman) сделал вывод, что факты
свидетельствуют в пользу Дейкстры и нам лучше обходиться без
goto (1980), а многие современные языки, включая Java, даже не
содержат такой оператор.
Аргументы в защиту goto
Сторонники goto ратуют за осторожное применение оператора при
определенных обстоятельствах, а не за неразборчивое
Предыдущая << 1 .. 188 189 190 191 192 193 < 194 > 195 196 197 198 199 200 .. 426 >> Следующая