Советы профессионала
Зачем использовать подпрограммы?
· Самая важная причина – снижение сложности программ.
Создайте подпрограмму для сокрытия информации, чтобы о ней можно было не думать, и дальше используйте этот подпрограмму, не задумываясь, как подпрограмма работает.
Пример создания подпрограммы
В коде программы в нескольких местах преобразуется значение deviceUnits, выраженное в аппаратных единицах, в число точек points:
points:= deviceUnitsÝ(POINTS_PER_INCH / DeviceUnitsPerInch)
Сконструируем простую функциюDeviceUnitsToPoints, которая вычисляет это выражение:
Function DeviceUnitsToPoints (deviceUnits: integer): integer;
Begin
if DeviceUnitsPerInch<>0 then
DeviceUnitsToPoints:=deviceUnitsÝ( POINTS_PER_INCH /
DeviceUnitsPerInch)
Else
DeviceUnitsToPoints:= 0;
end;
После этого в коде программы все фрагменты вычисления points будут выглядеть так:
points:= DeviceUnitsToPoints (deviceUnits);
Если оставить прежний вариант программы, то в каждом фрагменте пришлось бы вставлять проверку деления на 0.Использование функции потребовало всего5 строчекдля этого!
· Другие важные причины использования подпрограмм:
§ Минимизация размера кода программы
§ Предотвращение дублирования кода
§ Облегчение сопровождение программы
§ Снижение числа ошибок.
Как оценить «длину» подпрограммы?
· Рекомендуемый размер подпрограммы: 50 - 150, 200 операторов
· Используйте для анализа длины цикломатическую сложность МакКейба
Цикломатическая сложность подсчитывает число точек принятия решений в подпрограмме:
a.Начните считать с 1
b.Добавляйте 1 для каждого из ключевых слов: if, while, for, repeat, and, or
c.Добавляйте 1 для каждого варианта case.
Если полученный результат 0..5 – все нормально, 6..10 –возможно следует подумать об упрощении, 10 и более – упрощайте подпрограмму!
Процедура или функция?
· Используйте функцию, если основная цель подпрограммы – возврат значения, указанного в имени функции. Иначе используйте процедуру!
Как правильно использовать параметры?
· Передавайте параметры в порядке входные значения – изменяемые значения – выходные значения
· Передавайте переменные состояния или кода ошибки последними
· Не используйте параметры подпрограммы в качестве рабочих переменных
· Ограничивайте число параметров примерно семью
· Убедитесь, что фактические параметры соответствуют формальным.
НЕ используйте рекурсию для решения задач, подобных нахождению факториала или чисел Фибоначчи!
Рекурсия – это очень мощный инструмент. Используйте рекурсию для решения задач сортировки, поиска путей, задач с использованием динамических структур данных.