Возьмем снова предыдущий алгоритм про закупку продуктов.

Пусть начальная инструкция выглядела так:

  • вот тебе 1000 рублей;

  • сходи в магазин «Возле дома»;

  • купи кефир.

Это вполне конкретная инструкция, в которой можно выделить саму команду «купи кефир» и ряд констант, связанных с ней:

  • сумма 1000 рублей;

  • магазин «Возле дома».

Расписав этот алгоритм в виде подробного набора действий, завтра мы захотим купить хлеб, или печенье, или бананы, или ещё что-то.

В этих алгоритмах многие действия будут похожими, а отличия будут только на уровне того, что именно купить.

То есть мы можем создать единый алгоритм под названием «купи» и указывать этому алгоритму «что купить», «где купить» и «сумму в наличии».

Обратите внимание: что купить, где купить и имеющаяся у нас сумма — величины, которые могут меняться, иначе говоря, это переменные величины.

Единицы смысла

  • алгоритм становится ценным, расширяя свою область применимости — чем шире область, тем он ценнее, потому что вы можете его переиспользовать (reuse);

  • чтобы охватить более широкую область, нужно параметризовать задачу — выделить все те сущности, которые могут меняться, но при этом не влияют на саму суть алгоритма - в каком-то смысле параметризация напрямую связана с абстрагированием;

  • параметры задачи — это переменные величины;

  • название переменной должно отражать суть того, что она хранит: именование (naming) — одна из сложнейших задач в программировании: какое имя придумать переменной так, чтобы сразу было понятно, для чего эта переменная нужна;

  • а ещё есть тип переменной — он задает допустимый диапазон значений, которые переменная может принимать (об этом мы ещё поговорим более подробно);

  • всё вместе: название алгоритма, имена входных переменных, их типы, и тип возвращаемого значения образуют контракт.

Словарь

  • параметр / параметризовать

  • переменная / входная переменная

  • тип переменной

  • именование

  • контракт