質問するログイン新規登録

回答編集履歴

2

ES2015版を作成

2017/11/18 09:28

投稿

miyabi-sun
miyabi-sun

スコア21501

answer CHANGED
@@ -21,11 +21,8 @@
21
21
  }
22
22
  console.log(calcSum(1, 2, 3)); // 6
23
23
  console.log(calcSum(1, 2)); // 3
24
- ```
25
24
 
26
- ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
25
+ // ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
27
-
28
- ```JavaScript
29
26
  function calcSum(a = 0, b = 0, c = 0) {
30
27
  return a + b + c;
31
28
  }
@@ -51,10 +48,6 @@
51
48
  console.log(calcSum([1, 2, 3, 5, 5])); // 16
52
49
  ```
53
50
 
54
- ---
55
-
56
- おまけのおまけ: calcSumを完成させる
57
-
58
51
  argumentsと配列操作を使ってかっこよく仕上げます。
59
52
  自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
60
53
  リスト操作のメソッドを使おうとするとエラーが出ます。
@@ -71,4 +64,27 @@
71
64
  console.log(calcSum(1, 2)); // 3
72
65
  console.log(calcSum(1, 2, 3)); // 6
73
66
  console.log(calcSum(1, 2, 3, 4)); // 10
67
+ ```
68
+
69
+ ---
70
+
71
+ おまけのおまけ!: ES2015をフルに使った場合
72
+
73
+ > maisumakun:
74
+ > babelやNode前提の環境では、(同種の引数を任意個受ける、という状況なら)最後のようにspread引数として宣言しておくのがわかりやすい気もします。
75
+
76
+ JSも幾つかバージョンがあり、ES2015という新バージョンでは更に強化した記述が可能になりました。
77
+ アロー演算子、spread、reduceをフル活用すれば質問文の例題を1行で書けてしまいます。
78
+ 残念ながらIE11では対応していませんが、他のモダンブラウザ全てとNode.jsでは扱えますので調べてみてください。
79
+
80
+ IE11に対応する場合、Babelという古いJSのバージョンに戻すソフトを使えば大体動作します。
81
+ 自動化ツールを組んで、書いたコードをデプロイ前にBabelを通して反映するということが可能です。
82
+
83
+ ```JavaScript
84
+ const calcSum = (...nums) => nums.reduce((a, b) => a + b, 0)
85
+ console.log(calcSum()); // 0
86
+ console.log(calcSum(1)); // 1
87
+ console.log(calcSum(1, 2)); // 3
88
+ console.log(calcSum(1, 2, 3)); // 6
89
+ console.log(calcSum(1, 2, 3, 4)); // 10
74
90
  ```

1

おまけのおまけ追加

2017/11/18 09:28

投稿

miyabi-sun
miyabi-sun

スコア21501

answer CHANGED
@@ -49,4 +49,26 @@
49
49
  console.log(calcSum([1, 2])); // 3
50
50
  console.log(calcSum([1, 2, 3])); // 6
51
51
  console.log(calcSum([1, 2, 3, 5, 5])); // 16
52
+ ```
53
+
54
+ ---
55
+
56
+ おまけのおまけ: calcSumを完成させる
57
+
58
+ argumentsと配列操作を使ってかっこよく仕上げます。
59
+ 自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
60
+ リスト操作のメソッドを使おうとするとエラーが出ます。
61
+
62
+ 参考サイト: [[JavaScript] arguments をサクッと配列に変換する方法](http://phiary.me/javascript-arguments-to-array/)
63
+
64
+ ```JavaScript
65
+ function calcSum() {
66
+ var args = Array.prototype.slice.call(arguments);
67
+ return args.reduce(function(a, b){ return a + b }, 0);
68
+ }
69
+ console.log(calcSum()); // 0
70
+ console.log(calcSum(1)); // 1
71
+ console.log(calcSum(1, 2)); // 3
72
+ console.log(calcSum(1, 2, 3)); // 6
73
+ console.log(calcSum(1, 2, 3, 4)); // 10
52
74
  ```