回答編集履歴

2

ES2015版を作成

2017/11/18 09:28

投稿

miyabi-sun
miyabi-sun

スコア21194

test CHANGED
@@ -44,15 +44,9 @@
44
44
 
45
45
  console.log(calcSum(1, 2)); // 3
46
46
 
47
- ```
48
47
 
49
48
 
50
-
51
- ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
49
+ // ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
52
-
53
-
54
-
55
- ```JavaScript
56
50
 
57
51
  function calcSum(a = 0, b = 0, c = 0) {
58
52
 
@@ -104,14 +98,6 @@
104
98
 
105
99
 
106
100
 
107
- ---
108
-
109
-
110
-
111
- おまけのおまけ: calcSumを完成させる
112
-
113
-
114
-
115
101
  argumentsと配列操作を使ってかっこよく仕上げます。
116
102
 
117
103
  自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
@@ -145,3 +131,49 @@
145
131
  console.log(calcSum(1, 2, 3, 4)); // 10
146
132
 
147
133
  ```
134
+
135
+
136
+
137
+ ---
138
+
139
+
140
+
141
+ おまけのおまけ!: ES2015をフルに使った場合
142
+
143
+
144
+
145
+ > maisumakun:
146
+
147
+ > babelやNode前提の環境では、(同種の引数を任意個受ける、という状況なら)最後のようにspread引数として宣言しておくのがわかりやすい気もします。
148
+
149
+
150
+
151
+ JSも幾つかバージョンがあり、ES2015という新バージョンでは更に強化した記述が可能になりました。
152
+
153
+ アロー演算子、spread、reduceをフル活用すれば質問文の例題を1行で書けてしまいます。
154
+
155
+ 残念ながらIE11では対応していませんが、他のモダンブラウザ全てとNode.jsでは扱えますので調べてみてください。
156
+
157
+
158
+
159
+ IE11に対応する場合、Babelという古いJSのバージョンに戻すソフトを使えば大体動作します。
160
+
161
+ 自動化ツールを組んで、書いたコードをデプロイ前にBabelを通して反映するということが可能です。
162
+
163
+
164
+
165
+ ```JavaScript
166
+
167
+ const calcSum = (...nums) => nums.reduce((a, b) => a + b, 0)
168
+
169
+ console.log(calcSum()); // 0
170
+
171
+ console.log(calcSum(1)); // 1
172
+
173
+ console.log(calcSum(1, 2)); // 3
174
+
175
+ console.log(calcSum(1, 2, 3)); // 6
176
+
177
+ console.log(calcSum(1, 2, 3, 4)); // 10
178
+
179
+ ```

1

おまけのおまけ追加

2017/11/18 09:28

投稿

miyabi-sun
miyabi-sun

スコア21194

test CHANGED
@@ -101,3 +101,47 @@
101
101
  console.log(calcSum([1, 2, 3, 5, 5])); // 16
102
102
 
103
103
  ```
104
+
105
+
106
+
107
+ ---
108
+
109
+
110
+
111
+ おまけのおまけ: calcSumを完成させる
112
+
113
+
114
+
115
+ argumentsと配列操作を使ってかっこよく仕上げます。
116
+
117
+ 自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
118
+
119
+ リスト操作のメソッドを使おうとするとエラーが出ます。
120
+
121
+
122
+
123
+ 参考サイト: [[JavaScript] arguments をサクッと配列に変換する方法](http://phiary.me/javascript-arguments-to-array/)
124
+
125
+
126
+
127
+ ```JavaScript
128
+
129
+ function calcSum() {
130
+
131
+ var args = Array.prototype.slice.call(arguments);
132
+
133
+ return args.reduce(function(a, b){ return a + b }, 0);
134
+
135
+ }
136
+
137
+ console.log(calcSum()); // 0
138
+
139
+ console.log(calcSum(1)); // 1
140
+
141
+ console.log(calcSum(1, 2)); // 3
142
+
143
+ console.log(calcSum(1, 2, 3)); // 6
144
+
145
+ console.log(calcSum(1, 2, 3, 4)); // 10
146
+
147
+ ```