PROG_WAY_BLOG Telegram 283
Реализация мемоизации в 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
🔥76👍5🐳21😁1



tgoop.com/prog_way_blog/283
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

During the meeting with TSE Minister Edson Fachin, Perekopsky also mentioned the TSE channel on the platform as one of the firm's key success stories. Launched as part of the company's commitments to tackle the spread of fake news in Brazil, the verified channel has attracted more than 184,000 members in less than a month. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn. 4How to customize a Telegram channel? Activate up to 20 bots Telegram users themselves will be able to flag and report potentially false content.
from us


Telegram progway — программирование, IT
FROM American