Возьмем снова предыдущий алгоритм про закупку продуктов.
Пусть начальная инструкция выглядела так:
-
вот тебе 1000 рублей;
-
сходи в магазин «Возле дома»;
-
купи кефир.
Это вполне конкретная инструкция, в которой можно выделить саму команду «купи кефир» и ряд констант, связанных с ней:
-
сумма 1000 рублей;
-
магазин «Возле дома».
Расписав этот алгоритм в виде подробного набора действий, завтра мы захотим купить хлеб, или печенье, или бананы, или ещё что-то.
В этих алгоритмах многие действия будут похожими, а отличия будут только на уровне того, что именно купить.
То есть мы можем создать единый алгоритм под названием «купи» и указывать этому алгоритму «что купить», «где купить» и «сумму в наличии».
Обратите внимание: что купить, где купить и имеющаяся у нас сумма — величины, которые могут меняться, иначе говоря, это переменные величины.
Единицы смысла
-
алгоритм становится ценным, расширяя свою область применимости — чем шире область, тем он ценнее, потому что вы можете его переиспользовать (reuse);
-
чтобы охватить более широкую область, нужно параметризовать задачу — выделить все те сущности, которые могут меняться, но при этом не влияют на саму суть алгоритма - в каком-то смысле параметризация напрямую связана с абстрагированием;
-
параметры задачи — это переменные величины;
-
название переменной должно отражать суть того, что она хранит: именование (naming) — одна из сложнейших задач в программировании: какое имя придумать переменной так, чтобы сразу было понятно, для чего эта переменная нужна;
-
а ещё есть тип переменной — он задает допустимый диапазон значений, которые переменная может принимать (об этом мы ещё поговорим более подробно);
-
всё вместе: название алгоритма, имена входных переменных, их типы, и тип возвращаемого значения образуют контракт.
Словарь
-
параметр / параметризовать
-
переменная / входная переменная
-
тип переменной
-
именование
-
контракт