この動画はメンバー限定動画です

全ての講座が
月額990円で学び放題

講座の情報を見る

TypeScript入門点数の平均を求めるプログラムを作ろう②

記事を共有:

  • X
  • Pocket
  • クリップボードにコピー

前のレッスンの続きで、パラメータの点数をさまざまな形で集計してみましょう。ここまでのプログラムは次のようになります。

const score: number[] = [];
for (let i=2; i<process.argv.length; i++) {
  score.push(Number(process.argv[i]));
}
console.table(score);

人数を求めよう

まずは、対象の人数を求めましょう。これは簡単で、配列の長さをlengthプロパティから取得します。

console.log("人数: " + score.length);

ここでは、4と表示されました。

最高点・最低点を表示しよう

続いて、最高点と最低点を表示しましょう。これらは、Mathオブジェクトにあるmaxメソッドと、minメソッドで簡単に求められます。

console.log("最高点: " + Math.max(...score));
console.log("最低点: " + Math.min(...score));

これで、指定した配列の中で最高のものと最低のものが表示されます。maxメソッドやminメソッドでは、配列を指定する場合は先頭に「…」が必要になるので気をつけましょう。

次のように呼び出します。

node js/avarage.js 90 50 10

すると、90と10が表示されます。

合計点を求めよう

合計点は、簡単には求められないので、自分で関数を宣言しましょう。先頭に次のように追加します。

function get_sum(score: number[]) : number {
  let sum = 0;
  for (let i=0; i<score.length; i++) {
    sum += score[i];
  }
  return sum;
}

渡された配列の内容をfor構文で1つずつ取り出して、その内容をsumという変数に加算していきます。「+=」という代入演算子を加えて、再び配列に代入するという動作をします。

これで、「get_sum」という変数に配列をパラメータとして渡せば、その合計点を求めることができます。 次のように呼び出しましょう。

console.log("合計: " + get_sum(score));

これで合計が計算されます。

平均値を求めよう

最後に、平均値を求めましょう。平均値は合計と人数が分かれば、簡単に求めることができます。ここでは、関数を準備しましょう。

function get_avarage(score: number[]): number {
  const sum = get_sum(number);
  const avarage = sum / score.length;
  return avarage;
}

すでに作成した「get_sum」関数を再び利用して合計を求めます。それを、score.lengthプロパティで割ることで平均を求めることができるので、これを戻り値としました。呼び出してみましょう。

console.log("平均: " + get_avarage(socre));

次のように呼び出してみましょう。

node js/avarage.js 100 80 50 98

すると、82と求められます。

アロー関数で書き換えよう

ここで、先ほど作成した「get_avarage」関数の内容を見てみましょう。

function get_avarage(score: number[]): number {
  const sum = get_sum(number);
  const avarage = sum / score.length;
  return avarage;
}

ここでは、分かりやすくするために計算結果を都度定数に代入して作っていましたが、実際には定数を介さなくても直接計算で求めることができます。

function get_avarage(score: number[]): number {
  return get_sum(number) / score.length;
}

すると、1行しかないプログラムになるため、これはアロー関数を使って書き直せば、もっと簡単に書くことができます。

const get_avarage = (score: number[]): number => get_sum(number) / score.length;

慣れてきたら、短くプログラムを書く練習もしてみると良いでしょう。

前のレッスン 次のレッスン