四則演算をサポートする電卓ユーティリティ
実用的に使える「加算・減算・乗算・除算」を全部サポートした関数です。入力チェックやエラーメッセージも備えています。
コード
function calculator(mode, ...nums) {
// 型チェック:数値以外を含む場合はエラー
if (nums.length === 0) return "数値を入力してください";
if (!nums.every(n => typeof n === "number" && Number.isFinite(n))) {
return "数値のみを入力してください";
}
switch (mode) {
case "add": {
return nums.reduce((sum, n) => sum + n, 0);
}
case "subtract": {
// 1つなら符号反転、2つ以上なら左から順に引いていく
if (nums.length === 1) return -nums[0];
return nums.slice(1).reduce((acc, n) => acc - n, nums[0]);
}
case "multiply": {
return nums.reduce((product, n) => product * n, 1);
}
case "divide": {
// 1つなら 1 / x、2つ以上なら左から順に割る
if (nums.length === 1) {
if (nums[0] === 0) return "0 で割ることはできません";
return 1 / nums[0];
}
// 途中で 0 を含む場合はエラーを返す
for (let i = 1; i < nums.length; i++) {
if (nums[i] === 0) return "0 で割ることはできません";
}
return nums.slice(1).reduce((acc, n) => acc / n, nums[0]);
}
default:
return "対応していないモードです(add / subtract / multiply / divide を指定してください)";
}
}
JavaScript使い方例
console.log(calculator("add", 1, 2, 3, 4)); // 10
console.log(calculator("subtract", 10)); // -10
console.log(calculator("subtract", 10, 3, 2)); // 5 (10 - 3 - 2)
console.log(calculator("multiply", 2, 3, 4)); // 24
console.log(calculator("divide", 20, 2, 2)); // 5 (20 / 2 / 2)
console.log(calculator("divide", 5)); // 0.2 (1 / 5)
console.log(calculator("divide", 10, 0)); // "0 で割ることはできません"
console.log(calculator("add", 1, "2")); // "数値のみを入力してください"
console.log(calculator("pow", 2, 3)); // "対応していないモードです..."
JavaScript仕様のポイント
- モード指定: “add” / “subtract” / “multiply” / “divide” の4種類。
- 入力チェック: 数値のみを許可、未入力をエラーにする。
- 減算の仕様:
- 1引数: 符号反転(例:subtract(10) → -10)
- 2引数以上: 左から順に引く(例:subtract(10, 3, 2) → 5)
- 除算の仕様:
- 1引数: 逆数(例:divide(5) → 0.2)
- 2引数以上: 左から順に割る。途中に 0 がある場合はエラー。
- 戻り値: 成功時は数値、入力エラーや未対応モードは文字列メッセージ。
拡張アイデア
- ラベル付き引数: オプションをオブジェクトで渡し、丸め設定や精度指定を追加する。
- 結果のフォーマット: 小数点の桁数を固定(例:toFixed)や、丸めルール(銀行丸め)を選べるようにする。
- 追加モード: “max” / “min” / “average” / “sumOfSquares” を追加して計算ユーティリティに拡張する。


