这个“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);
}
我的第一个想法是这是一种Memoization形式,只有一个记忆结果。但是,如果是这种情况,如果找到previous.result
,你只需返回samePrefix
。
相反,它看起来像你正在做的是创建一种Reduce / Fold功能,能够从以前的状态中提取它。
这种模式有许多不同的名称,因此您可以根据自己的需要确定最适合您的模式。以下是一些建议:
Reduction
/ Reducer
FoldResult
/ Folder
Aggregation
/ Aggregator