Существует ли стандартное имя для этой идиомы Deriver (написано в Typescript, но не для Typescript):
type Derivation<T, R> = { value: T, result: R };
type Deriver<T, R> = (
previous: Derivation<T, R> | undefined,
value: T
) => R;
, где deriver
- это функция, которая вычисляет новое значение R
используя предыдущее значение / результат в качестве подсказки для потенциальной оптимизации нового вычисления?
Вот пример такой функции:
function complexCalculation(a: number, b: number): number {
// assume that this function is expensive
return a + b;
}
function calcDeriver(
previous: Derivation<number[], number> | undefined,
value: number[]
): number {
if (previous) {
if (previous.value === value) {
return previous.result;
}
let samePrefix = true;
if (previous.value.length < value.length) {
for (let i = 0; i < previous.value.length; i++) {
if (previous.value[i] !== value[i]) {
samePrefix = false;
break;
}
}
}
if (samePrefix) {
return value
.slice(previous.value.length)
.reduce(complexCalculation, previous.result);
}
}
return value.reduce(complexCalculation, 0);
}