回答編集履歴

1

おまけ追加

2021/12/28 06:24

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -58,14 +58,36 @@
58
58
 
59
59
  undefined
60
60
 
61
+
62
+
61
63
  > n1
62
64
 
63
65
  1
64
66
 
67
+
68
+
65
69
  > n2
66
70
 
67
71
  2
68
72
 
73
+
74
+
75
+ # 代入だけなら値が取れる
76
+
77
+ > n1 = 10
78
+
79
+ 10
80
+
81
+
82
+
83
+ # カンマでくくりつつの複数代入は一番最後の値が取れる
84
+
85
+ # しかし変数宣言の目的は変数宣言なわけだし、微妙ではあるがおかしいというほどではなさそう
86
+
87
+ > n1 = 11, n2 = 12
88
+
89
+ 12
90
+
69
91
  ```
70
92
 
71
93
 
@@ -104,26 +126,126 @@
104
126
 
105
127
 
106
128
 
129
+ 仕様がundefinedを返しましょうって言ってるのに、
130
+
131
+ 勝手に入力値を返し始めたら「なんだこいつ!?」ってなってしまいます。
132
+
133
+
134
+
135
+ REPLではコマンドを打ち込むと、
136
+
137
+ 毎回結果を評価して画面出力してくれます。
138
+
139
+ 下記のようにしましょう。
140
+
141
+
142
+
143
+ ```
144
+
145
+ > let number = 1
146
+
147
+ undefined
148
+
149
+
150
+
151
+ # REPLで値を確認する場合、変数単体や式を直接投げ込む
152
+
153
+ > number
154
+
155
+ 1
156
+
157
+ ```
158
+
159
+
160
+
107
161
  ---
108
162
 
109
163
 
110
164
 
165
+ 【おまけ】 console.logで値を返してほしい!
166
+
167
+
168
+
169
+ 関数型プログラミングをサポートするライブラリにそういうのあります。
170
+
171
+ 例えばJavaScriptやNode.jsでよく使われているLodashというライブラリ
172
+
173
+ [tap - Lodash](https://lodash.com/docs/4.17.15#tap)
174
+
175
+
176
+
177
+ [Online Lodash Tester](https://codepen.io/travist/full/jrBjBz/)
178
+
111
- 下記ようしょう
179
+ サイトで実際使ってみ
180
+
181
+
182
+
112
-
183
+ ```js
184
+
113
-
185
+ result = _.tap(123, console.log)
186
+
114
-
187
+ // 123
188
+
115
- ```
189
+ ```
190
+
191
+
192
+
116
-
193
+ このときのtapはこういう感じの関数になっています。
194
+
195
+
196
+
197
+ ```js
198
+
199
+ function tap (value, callback) {
200
+
201
+ callback(value);
202
+
203
+ return value;
204
+
205
+ }
206
+
207
+
208
+
117
- > let number = 1
209
+ > tap(123, console.log);
118
-
119
- undefined
210
+
120
-
121
-
122
-
123
- # REPLで値を確認する場合、変数単体や式を直接投げ込む
124
-
125
- > number
126
-
127
- 1
211
+ 123
212
+
128
-
213
+ 123
214
+
129
- ```
215
+ ```
216
+
217
+
218
+
219
+ 実行結果捨てて、改めて入力値返してるんだから
220
+
221
+ そりゃそうなるわなという感じなんですけどね。
222
+
223
+
224
+
225
+ 例えばLodashでは[チェーン記法](https://qiita.com/kurararara/items/fb470ea71e59cd0371d4)を使うことで複雑な値の加工もほんの数行で完了させることができます。
226
+
227
+
228
+
229
+ ただし、複雑なことをメソッドチェーンでやるわけで、
230
+
231
+ 途中の値どうなってんねん?って知りたいという動機があるわけです。
232
+
233
+ でも`console.log`を通過させると値が`undefined`に変異してしまう。
234
+
235
+ こういう時に`.tap(console.log)`を挟んで画面出力させつつロジックの処理は途切れさせないということができます。
236
+
237
+
238
+
239
+ ```js
240
+
241
+ _(users)
242
+
243
+ .filter(function(user) { return user.age > 35; })
244
+
245
+ .tap(console.log) // この時点での値はどうなってるんだい?
246
+
247
+ .pick('name')
248
+
249
+ .value();
250
+
251
+ ```