JavaScriptで四則演算に対応した電卓関数を作成する方法
JavaScriptでは、演算子を示す1文字(+、-、*、/)を第一引数に受け取り、その後に任意の個数の数値リテラルを受け取る関数 calculator() を作成できます。この関数の役割は、第一引数で指定された演算を、後続のすべての数値に対して実行し、その結果を返すことです。
関数の仕様
演算の種類によって処理の考え方が異なります。
- 加算(+)・乗算(*)の場合: すべての要素に対して同じ演算を順番に適用します。
- 減算(-)・除算(/)の場合: 最初の要素を基準値とし、そこから残りの要素を順に引く、または割っていく必要があります。
コード例
それでは、この関数の実装コードを見ていきましょう。
const calculator = (operation, ...numbers) => {
const legend = '+-*/';
const ind = legend.indexOf(operation);
return numbers.reduce((acc, val) => {
switch(operation){
case '+': return acc+val;
case '-': return acc-val;
case '*': return acc*val;
case '/': return acc/val;
};
});
};
console.log(calculator('+', 12, 45, 21, 12, 6));
console.log(calculator('-', 89, 45, 21, 12, 6));
console.log(calculator('*', 12, 45, 21, 12, 6));
console.log(calculator('/', 189000, 45, 7, 12, 4));実行結果
コンソールには次のように出力されます。
96 5 816480 12.5
コードの解説
この関数のポイントは、配列の reduce() メソッドを活用している点です。
reduce() は、配列の各要素を左から右へ順番に処理しながら、単一の値へと集約するメソッドです。ここでは、コールバック関数内の switch 文で第一引数の演算子を判定し、累積値(acc)と現在の要素(val)に対して対応する演算を繰り返し適用しています。
この仕組みにより、減算や除算の場合でも、最初の要素が自然に基準値として扱われ、残りの要素が順番に処理されるため、要件を満たす動作が実現できます。
また、可変長引数(レストパラメータ ...numbers)を使うことで、呼び出し時に数値をいくつ渡しても柔軟に対応できるのも、この実装の魅力です。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン