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

質問編集履歴

5

2018/05/12 14:10

投稿

murabito
murabito

スコア108

title CHANGED
@@ -1,1 +1,1 @@
1
- 関数Aの実行結果がnullかundefinedのみに関数内に変数を新たに作らず、関数Bを実行させるには?
1
+ 関数Aの実行結果がnullかundefinedの時のみに関数内に変数を新たに作らず、関数Bを実行させるには?
body CHANGED
File without changes

4

`foo(v)`をこのように2回呼ぶことも出来るでしょうが、これは非効率なので避けたいところです。

2018/05/12 14:09

投稿

murabito
murabito

スコア108

title CHANGED
File without changes
body CHANGED
@@ -25,6 +25,13 @@
25
25
  一応、このように`foo(v)`の結果をローカル変数に入れてから、`foo(v)`の結果が`null`または`undefined`ではないかをチェックすれば、
26
26
  期待する動きにはなるのですが、このようにローカル変数を作らないと期待する結果は得られないでしょうか?
27
27
 
28
+ ```
29
+ const hoge = (foo, bar) => (v) => {
30
+ return foo(v) != null ? foo(v) : bar(v);
31
+ }
32
+ ```
33
+ `foo(v)`をこのように2回呼ぶことも出来るでしょうが、これは非効率なので避けたいところです。
34
+
28
35
  ```ここに言語を入力
29
36
  const hoge = (foo, bar) => (v) => foo(v) || bar(v);
30
37
  ```

3

const zero = (v) => 0 * v; const double = (v) => 2 * v; console.log( hoge(zero, double)(10) )

2018/05/11 11:59

投稿

murabito
murabito

スコア108

title CHANGED
File without changes
body CHANGED
@@ -7,15 +7,11 @@
7
7
  `bar(v)`が実行されてしまいます。
8
8
 
9
9
  ```
10
+ const zero = (v) => 0 * v;
11
+ const double = (v) => 2 * v;
12
+
10
13
  console.log(
11
- hoge(
12
- function(v) {
13
- return 0;
14
- },
15
- function(v) {
16
- return v * 2;
14
+ hoge(zero, double)(10)
17
- }
18
- )(10)
19
15
  )
20
16
  ```
21
17
  この場合だと、`0`は`falsy`なので、`20`が`返って来てしまいます。

2

const hoge = (foo, bar) => (v) => { const result = foo(v) return result != null ? result : bar(v);

2018/05/11 11:49

投稿

murabito
murabito

スコア108

title CHANGED
File without changes
body CHANGED
@@ -21,15 +21,9 @@
21
21
  この場合だと、`0`は`falsy`なので、`20`が`返って来てしまいます。
22
22
 
23
23
  ```
24
- function hoge(foo, bar) {
24
+ const hoge = (foo, bar) => (v) => {
25
- return function(v) {
26
- const result = foo(v)
25
+ const result = foo(v)
27
- if (result != null) {
26
+ return result != null ? result : bar(v);
28
- return result
29
- } else {
30
- return bar(v);
31
- }
32
- }
33
27
  }
34
28
  ```
35
29
  一応、このように`foo(v)`の結果をローカル変数に入れてから、`foo(v)`の結果が`null`または`undefined`ではないかをチェックすれば、

1

const hoge = (foo, bar) => (v) => foo(v) || bar(v);

2018/05/11 11:45

投稿

murabito
murabito

スコア108

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,5 @@
1
1
  ```ここに言語を入力
2
- function hoge(foo, bar) {
3
- return function(v) {
4
- return foo(v) || bar(v);
2
+ const hoge = (foo, bar) => (v) => foo(v) || bar(v);
5
- }
6
- }
7
3
  ```
8
4
 
9
5
  `foo(v)`の結果が`null`か`undefined`の時に`bar(v)`を実行させたいので、
@@ -40,11 +36,7 @@
40
36
  期待する動きにはなるのですが、このようにローカル変数を作らないと期待する結果は得られないでしょうか?
41
37
 
42
38
  ```ここに言語を入力
43
- function hoge(foo, bar) {
44
- return function(v) {
45
- return foo(v) || bar(v);
39
+ const hoge = (foo, bar) => (v) => foo(v) || bar(v);
46
- }
47
- }
48
40
  ```
49
41
  このように全て、引数に渡ってくる値のみで完結させたいのですが、何か方法があれば教えて頂ければ幸いです。
50
42