Некоторые противники строго структурного программирования представляют себе его неправильно. Они полагают, что структурный код создаётся в два шага:
- сначала алгоритм создаётся «нормально» (то есть, как придётся)
- а затем придумывается, как устранить из него нарушения структурности
Разумеется, устранение нарушений
- требует дополнительных усилий
- может сопровождаться ошибками
- и может приводить к странному коду, который не столько устраняет нарушения структурности, сколько описывает их с помощью структурных операторов, что всегда возможно за счёт алгоритмической полноты [0], в тоже время не давая никаких преимуществ в сравнении с исходным неструктурным кодом и только больше запутывая его
Не удивительно, что такое соломенное чучело структурного программирования может вызывать «справедливое» негодование, только к настоящей дисциплине структурности это не имеет никакого отношения.
Обучение структурному программированию с самого начала состоит не в подобных упражнениях, а в выработке способности создания алгоритмов сразу в структурном виде. Именно такой подход даёт преимущества строго структурного кода. Он требует дополнительных усилий лишь в самом начале, а в дальнейшем воспроизводится естественным образом без требования постоянной борьбы с самим собой.
Это можно сравнить с культурной речью. Если она лежит в основе общения человека, то её поддержание, когда она необходима, является не подвигом, а рутиной. Если же человек привык через слово вставлять слова-паразиты, то культурная речь для него крайне затратна, и представляется чем-то противоестественным, что нужно из себя выдавливать.
И это одна из причин, почему совмещать оба подхода нормально не получается. Если разработчик постоянно выбирает, что применить в каждом случае, то он лишается возможности выработки безусловной привычки, и невольно сам же будет создавать предпосылки к выбору нарушения структурности. Заодно теряется возможность опираться на гарантии структурности даже в строгом коде, ведь нужно постоянно предполагать, что либо структурность уже нарушена, либо будет нарушена после одной из доработок.
Чем же хорошо правильное следование строгой дисциплине? Структурность, фактически, предоставляет модульность на уровне операторов. При разработке сверху вниз, то есть через уточнение кода, в принципе не возникает потребности во взламывании потока управления адекватной схемы. При разработке снизу вверх любая последовательность операторов сразу готова для выделения в подпрограмму. Всё это даёт бо́льшую предсказуемость и плавность развития — код не противоречит собственной схеме и не препятствует её выделению.
[0] Примеры точного воспроизведения неструктурного программирования с помощью струтурных операторов есть в заметке Структурное программирование не про запрет GOTO

Комментариев нет:
Отправить комментарий