TypeScriptで累積平均算出法するためのクラス
クラス定義
変更されていく使い方が多そうなので、ミュータブルなクラスにした。
code:ts
class AccumulatedAverage {
private constructor(private _average: number, private _count: number) { }
static from(arr: readonly number[]): AccumulatedAverage {
return new AccumulatedAverage(
arr.reduce((a, b) => a + b) / arr.length,
arr.length,
);
}
get average(): number {
return this._average;
}
append(newValue: number): void {
this._average = (this._count * this._average + newValue) / (this._count + 1);
this._count++;
}
}
static from(arr: readonly number[])の引数の型を要素を1つ以上もつ配列型にするとより安全になると思う。
readonly [number, ...number[]]かな
使い方
code:ts
const accumAvg = AccumulatedAverage.from(80, 45, 7); console.log(accumAvg.average);
// => 44
accumAvg.append(12);
console.log(accumAvg.average);
// => 36