КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Цели хорошего форматированияГоворя объективно, хорошая схема форматирования должна делать следующее: точно представлять логическую структуру кода. Для демонстрации логической структуры программисты обычно применяют отступы и другие неотображаемые символы; единообразно показывать логическую структуру кода. Некоторые стили форматирования состоят из правил с таким количеством исключений, что последовательно их соблюдать практически невозможно. Действительно хороший стиль подходит в большинстве случаев; улучшать читабельность. Стратегия использования отступов, соответствующая логике, но усложняющая процесс чтения кода, бесполезна. Схема форматирования, использующая пробелы и разделители только там, где они требуются компилятору, логична, но читать такой код невозможно. Хорошая структура форматирования упрощает чтение кода; выдерживать процедуру исправления. Лучшие схемы форматирования хорошо переносят модификацию кода. Исправление одной строки не должно приводить к изменению нескольких других. В дополнение к этим критериям иногда во внимание принимается и задача минимизации количества строк кода, необходимых для реализации простого выражения или блока. Способы форматирования Можно получить хороший формат кода, поразному используя несколько инструментов для форматирования. • Неотображаемые символы Используйте неотображаемые символы для улучшения читаемости. Неотображаемые символы, к которым относятся пробелы, знаки табуляции, переводы строк и пустые строки, — это основное средство для демонстрации структуры программы. Группировка взаимосвязанных выражений— еще один способ применения неотображаемых символов . В литературе мысли группируются в абзацы. Хорошо написанный абзац содержит предложения, относящиеся только к определенной идее. Он не должен содержать посторонних предложений. Точно так же абзац кода должен содержать только взаимосвязанные операторы, выполняющие одно задание. Пустые строки. Кроме необходимости группировать взаимосвязанные операторы, очень важно отделять несвязанные выражения друг от друга. Начало нового абзаца в книге обозначается отступом или пустой строкой. Начало нового абзаца в коде нужно указывать с помощью пустой строки. Пустые строки позволяют продемонстрировать организацию программы. Вы можете использовать их для деления групп взаимосвязанных операторов на абзацы, отделения методов друг от друга и выделения комментариев. Хотя эту статистику тяжело применить на практике, но одно исследование показало, что оптимальное число пустых строк в программе составляет от 8 до 16 %. Если оно больше 16 %, то время, затрачиваемое на отладку, заметно увеличивается Отступы. Применяйте отступы для демонстрации логической структуры программы. Как правило, операторы выделяются отступами, когда они следуют после некоторого выражения, от которого они логически зависят. Оптимальными являются отступы из 2—4 пробелов . Скобки Используйте скобки чаще, чем вам это кажется необходимым. Применяйте скобки для разъяснения выражений, состоящих из двух и более членов. Возможно, в скобках нет нужды, но они добавляют ясности и ничего вам не стоят. Например, скажите, как вычисляется следующее выражение? Вариант на C++: 12 + 4% 3 * 7 / 8. Пришлось ли вам задуматься о том, как эти выражения вычисляются, вот в чем вопрос? Можете ли вы быть уверенными в своем ответе без обращения к справочной информации? Даже опытные программисты не отвечают с полной уверенностью, и именно поэтому следует использовать скобки, если есть хоть малейшее сомнение в том, как вычисляется выражение. стили программирования • Программирование от состояний; • Структурное программирование; • Сентенциальное программирование; • Программирование от событий; • Программирование от процессов и приоритетов; • В программировании от состояний процесс представляется как смена состояний системы. Новое состояние возникает в результате действия, изменяющего старое состояние, а выбор этого действия зависит от проверки условий. Математической моделью программы служит конечный автомат. Инвариантом применимости данного стиля является следующая характеристика задачи: • Действия глобальны, условия локальны. • Естественным способом программирования такой задачи на современных языках программирования является использование операторов goto либо объектов, обменивающихся информацией через общее поле памяти. • В структурном программировании, которому сейчас учат как монопольному первоуровневому стилю, действия и условия локальны. Управляющие действия образуют иерархическую структуру, а потоки передачи данных в принципе должны согласовываться с данной структурой. Этот стиль поддерживается структурами современных традиционных языков программирования (например, Pascal, C). Математической моделью программ являются здесь вычислимые функции. • В сентенциальном стиле (Рефал, Пролог) действия и условия глобальны. Каждый шаг программы проверяет все поле зрения на соответствие образцу, находит тем самым применимое правило преобразования, и, согласно найденному правилу, преобразует все поле памяти. • Программирование на Прологе традиционно называют логическим. От логики здесь ничего не осталось, и термин вводит в заблуждение (и даже если бы осталось, логика здесь была лишь инструментом, и ставить конкретный инструмент впереди концепции то же самое, что телегу впереди лошади). • В программировании от событий и от приоритетов действия локальны, условия глобальны. Условие состоит в том, что в системе произошло некоторое событие, лучшим обработчиком которого оказалось данное действие. Но в программировании от событий такое событие (например, щелчок мыши) снабжает процесс-обработчик важной информацией (например, о месте щелчка). А при программировании от приоритетов событие состоит в том, что все более приоритетные процессы ничего не могут сделать, и никакой позитивной информации активизируемому процессу не дает. • На уровне понятий более высокого уровня возникают другие стили. • Функциональный стильпрограммирования, когда программа представляет собой функционал высокого уровня, преобразующий функции, представлен языками ЛИСП и ML. Если функции типизированы, то этот подход, сохраняя возможности понятий высших уровней исключительно компактно выразить сложную структуру, вдобавок крайне эффективен по использованию ресурсов. Но нынешние реализации функционального программирования не могут удержаться от использования рекурсий и нетипизируемых конструкций типа оператора вычисления произвольного выражения или оператора неподвижной точки. Это создало функциональному программированию репутацию крайне неэффективного стиля, подходящего лишь для прототипов программ. Функциональному стилю соответствуют интуиционистская логика предикатов (типизированный вариант) и комбинаторная логика (нетипизированный вариант). • Объектно-ориентированый стильявляется четверть-шагом к функциональному с точки зрения теории. Объекты показали даже достаточно необразованным людям. Что для сложных систем работа с действиями эффективнее работы с данными. С точки зрения практики, это несколько разных стилей, один из которых берет начало скорее в психологии и искусственном интеллекте, и успешно применяется для массового производства программ, таких, где внешняя упаковка важнее сути. Здесь объекты в разных контекстах могут вести себя совершенно по-разному, так что они соответствуют ролям людей. В данном случае четко видно, как ссылка на неадекватную сути подхода теорию абстрактных типов данных заставляет выпячивать слабейшие стороны подхода и мешает развитию действительно сильнейших. Программистам бы здесь к психологам обратиться, а не к математикам!
|