tgoop.com/prog_way_blog/283
Create:
Last Update:
Last Update:
Реализация мемоизации в JavaScript
О том, что такое мемоизация, я рассказывал в прошлом посте.
На самом деле, всё это довольно просто. Попробуем написать функцию-обёртку memoize
, с помощью которой можно мемоизировать любую другую функцию. Начнём как всегда с интерфейса:
function memoize(func) {
// ...
}
Наша функция-обёртка будет принимать только целевую функцию, которую мы хотим мемоизировать. В качестве кэша будем использовать
Map
:const cache = new Map();
И далее просто воспользуемся замыканием, чтобы ограничить доступ к созданному кэшу только для целевой функции. Для этого вернем из
memoize
новую функцию:return function(...args) {
// ключ сериализуем в строку, чтобы
// не было проблем с аргументами
// объектами, массивами и т.д.
const key = JSON.stringify(args);
// проверяем есть ли результат в кэше
if (!cache.has(key)) {
// если нет, то сохраняем в кэш
// значение вызова функции
cache.set(key, func(...args));
}
// и возвращаем значение из кэша
return cache.get(key);
};
Полный код функции:
function memoize(func) {
const cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (!cache.has(key)) {
cache.set(key, func(...args));
}
return cache.get(key);
};
}
Я осознанно не использовал TypeScript, так как он сильно визуально усложняет эту функцию и объяснений получается много. Натыкайте 🔥 на пост и я разберу как правильно типизировать такую функцию
@prog_way_blog — чат — #theory #code #javascript #data
BY progway — программирование, IT
Share with your friend now:
tgoop.com/prog_way_blog/283