Цель: создание функции высшего порядка, которая возвращает входную функцию с суперспособностью мемоизации.

Эта усовершенствованная версия функции ввода будет кэшировать вывод, соответствующий заданному вводу, так что, если в будущем мы получим тот же ввод, соответствующий вывод не будет переоцениваться, а будет обслуживаться из кеша.

Например, если у нас есть функция «добавить», которая принимает числа для добавления в качестве входных данных и возвращает сумму этих входных чисел. Таким образом, add(1,2,3) при первом вызове оценивает сумму 6, сохраняет результат в кеше для соответствующего ввода и возвращает 6, а когда add(1,2,3) вызывается в будущем, тогда поскольку функция добавления уже оценивалась для (1,2,3), поэтому ее результат будет обслуживаться из кеша.

О чем нужно позаботиться:

  1. Какой должен быть размер кэша? Максимальное количество входов, для которых вы будете хранить соответствующие им выходы.
  2. Как сгенерировать ключ из входных данных для хранения в memCache? (Подход, который мы использовали выше, заключался в объединении всех входных аргументов с помощью разделителя «|», лучшим способом может быть использование некоторой хэш-функции и применение их к входным аргументам)