回答編集履歴
1
おまけ追加
answer
CHANGED
@@ -28,10 +28,21 @@
|
|
28
28
|
```
|
29
29
|
> let n1 = 1, n2 = 2
|
30
30
|
undefined
|
31
|
+
|
31
32
|
> n1
|
32
33
|
1
|
34
|
+
|
33
35
|
> n2
|
34
36
|
2
|
37
|
+
|
38
|
+
# 代入だけなら値が取れる
|
39
|
+
> n1 = 10
|
40
|
+
10
|
41
|
+
|
42
|
+
# カンマでくくりつつの複数代入は一番最後の値が取れる
|
43
|
+
# しかし変数宣言の目的は変数宣言なわけだし、微妙ではあるがおかしいというほどではなさそう
|
44
|
+
> n1 = 11, n2 = 12
|
45
|
+
12
|
35
46
|
```
|
36
47
|
|
37
48
|
続いて`console.log(number)`が`undefined`を返す理由についてです。
|
@@ -51,8 +62,11 @@
|
|
51
62
|
> 6. Otherwise, perform Printer(logLevel, Formatter(args)).
|
52
63
|
> **7. Return undefined.**
|
53
64
|
|
54
|
-
|
65
|
+
仕様がundefinedを返しましょうって言ってるのに、
|
66
|
+
勝手に入力値を返し始めたら「なんだこいつ!?」ってなってしまいます。
|
55
67
|
|
68
|
+
REPLではコマンドを打ち込むと、
|
69
|
+
毎回結果を評価して画面出力してくれます。
|
56
70
|
下記のようにしましょう。
|
57
71
|
|
58
72
|
```
|
@@ -62,4 +76,51 @@
|
|
62
76
|
# REPLで値を確認する場合、変数単体や式を直接投げ込む
|
63
77
|
> number
|
64
78
|
1
|
79
|
+
```
|
80
|
+
|
81
|
+
---
|
82
|
+
|
83
|
+
【おまけ】 console.logで値を返してほしい!
|
84
|
+
|
85
|
+
関数型プログラミングをサポートするライブラリにそういうのあります。
|
86
|
+
例えばJavaScriptやNode.jsでよく使われているLodashというライブラリ
|
87
|
+
[tap - Lodash](https://lodash.com/docs/4.17.15#tap)
|
88
|
+
|
89
|
+
[Online Lodash Tester](https://codepen.io/travist/full/jrBjBz/)
|
90
|
+
このサイトで実際に使ってみます。
|
91
|
+
|
92
|
+
```js
|
93
|
+
result = _.tap(123, console.log)
|
94
|
+
// 123
|
95
|
+
```
|
96
|
+
|
97
|
+
このときのtapはこういう感じの関数になっています。
|
98
|
+
|
99
|
+
```js
|
100
|
+
function tap (value, callback) {
|
101
|
+
callback(value);
|
102
|
+
return value;
|
103
|
+
}
|
104
|
+
|
105
|
+
> tap(123, console.log);
|
106
|
+
123
|
107
|
+
123
|
108
|
+
```
|
109
|
+
|
110
|
+
実行結果捨てて、改めて入力値返してるんだから
|
111
|
+
そりゃそうなるわなという感じなんですけどね。
|
112
|
+
|
113
|
+
例えばLodashでは[チェーン記法](https://qiita.com/kurararara/items/fb470ea71e59cd0371d4)を使うことで複雑な値の加工もほんの数行で完了させることができます。
|
114
|
+
|
115
|
+
ただし、複雑なことをメソッドチェーンでやるわけで、
|
116
|
+
途中の値どうなってんねん?って知りたいという動機があるわけです。
|
117
|
+
でも`console.log`を通過させると値が`undefined`に変異してしまう。
|
118
|
+
こういう時に`.tap(console.log)`を挟んで画面出力させつつロジックの処理は途切れさせないということができます。
|
119
|
+
|
120
|
+
```js
|
121
|
+
_(users)
|
122
|
+
.filter(function(user) { return user.age > 35; })
|
123
|
+
.tap(console.log) // この時点での値はどうなってるんだい?
|
124
|
+
.pick('name')
|
125
|
+
.value();
|
65
126
|
```
|