回答編集履歴
10
修正
test
CHANGED
@@ -2,7 +2,37 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
初期化が目的なのであればdoSomething2です。
|
6
|
+
|
7
|
+
ちゃんと書くなら次のような感じ。
|
8
|
+
|
9
|
+
```javascript
|
10
|
+
|
11
|
+
class foo {
|
12
|
+
|
13
|
+
// 割愛
|
14
|
+
|
15
|
+
Initialize() {
|
16
|
+
|
17
|
+
this.bar.aaa = 10;
|
18
|
+
|
19
|
+
this.bar.bbb = 0;
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
```
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
#####
|
30
|
+
|
5
|
-
乳牛を例にして考えてみては?
|
31
|
+
違いについては、例えば乳牛を例にして考えてみては?
|
32
|
+
|
33
|
+
doSomething1ですがこれは、自分が持つ情報を他に与えるような作りになっています。コンストラクタでは、たまたま自分に情報を与えているだけです。
|
34
|
+
|
35
|
+
doSomething2ですがこれは、ただの初期化です。
|
6
36
|
|
7
37
|
```javascript
|
8
38
|
|
@@ -38,11 +68,7 @@
|
|
38
68
|
|
39
69
|
|
40
70
|
|
41
|
-
doSomething1ですがこれは、自分が持つ情報を他に与えるような作りになっています。コンストラクタでは、たまたま自分に情報を与えているだけです。
|
42
|
-
|
43
|
-
|
71
|
+
#####
|
44
|
-
|
45
|
-
|
46
72
|
|
47
73
|
不変性を絡めた質問をしたかったと考えると、
|
48
74
|
|
9
修正
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
乳牛を例にして考えてみては? fooやdoSomethingでは抽象的過ぎる気がします。
|
2
|
-
|
3
|
-
|
1
|
+
(※修正ばかりでごめんなさい、なんか考えの沼にはまってしまって)
|
4
2
|
|
5
3
|
|
4
|
+
|
5
|
+
乳牛を例にして考えてみては?
|
6
6
|
|
7
7
|
```javascript
|
8
8
|
|
@@ -38,9 +38,15 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
+
doSomething1ですがこれは、自分が持つ情報を他に与えるような作りになっています。コンストラクタでは、たまたま自分に情報を与えているだけです。
|
42
|
+
|
43
|
+
doSomething2ですがこれは、ただの初期化です。
|
44
|
+
|
45
|
+
|
46
|
+
|
41
47
|
不変性を絡めた質問をしたかったと考えると、
|
42
48
|
|
43
|
-
次に示すdoSomething3, 4みたいなことを例にしたかったとか?
|
49
|
+
次に示すdoSomething3, 4みたいなことを例にしたかったとか?この場合、引数をクローンしておかないと、乳房を共有することになっておかしくなっちゃいます。
|
44
50
|
|
45
51
|
```javascript
|
46
52
|
|
@@ -66,6 +72,6 @@
|
|
66
72
|
|
67
73
|
#####不変性
|
68
74
|
|
69
|
-
渡した引数を変えてはいけない
|
75
|
+
渡した引数を変えてはいけないうんぬんかんぬんは、不変性のことかな~と思います。
|
70
76
|
|
71
77
|
不変性については、例えば [Immutableの利便性、大きなメリットについて。](https://www.pandanoir.info/entry/2015/10/18/191106) こういった記事が見つかります。[Immutable.js](https://facebook.github.io/immutable-js/)のページを見ると、調査のとっかかりになるかもしれませんね。
|
8
修正
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
乳牛を例にして考えてみては? fooやdoSomethingでは抽象的過ぎる気がします。
|
2
|
+
|
3
|
+
…とはいえ、あまり伝えたいことがわからなかったり…。
|
2
4
|
|
3
5
|
|
4
6
|
|
@@ -36,9 +38,9 @@
|
|
36
38
|
|
37
39
|
|
38
40
|
|
39
|
-
|
41
|
+
不変性を絡めた質問をしたかったと考えると、
|
40
42
|
|
41
|
-
|
43
|
+
次に示すdoSomething3, 4みたいなことを例にしたかったとか?
|
42
44
|
|
43
45
|
```javascript
|
44
46
|
|
7
修正
test
CHANGED
@@ -36,6 +36,32 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
+
##
|
40
|
+
|
41
|
+
その、もしかしてdoSomething3, 4みたいなことを例にしたかったのでは?
|
42
|
+
|
43
|
+
```javascript
|
44
|
+
|
45
|
+
class 乳牛 {
|
46
|
+
|
47
|
+
constructor () {
|
48
|
+
|
49
|
+
// 割愛
|
50
|
+
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
doSomething3(乳牛Xの乳房) { this.乳房 = 乳牛Xの乳房 },
|
56
|
+
|
57
|
+
doSomething4(乳牛Xの乳房) { this.乳房 = 乳牛Xの乳房.クローン() }
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
|
64
|
+
|
39
65
|
#####不変性
|
40
66
|
|
41
67
|
渡した引数を変えてはいけないというのは、不変性のことかな~と思います。
|
6
微修正
test
CHANGED
@@ -8,9 +8,9 @@
|
|
8
8
|
|
9
9
|
constructor () {
|
10
10
|
|
11
|
-
this.初期水分
|
11
|
+
this.初期水分 = 10
|
12
12
|
|
13
|
-
this.初期脂肪分
|
13
|
+
this.初期脂肪分 = 0
|
14
14
|
|
15
15
|
this.乳房 = { 水分: 123, 脂肪分: 456 }
|
16
16
|
|
@@ -22,11 +22,11 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
doSomething1(乳牛Xの乳房) { 乳牛Xの乳房.水分 = this.初期水分
|
25
|
+
doSomething1(乳牛Xの乳房) { 乳牛Xの乳房.水分 = this.初期水分 },
|
26
26
|
|
27
27
|
doSomething2() {
|
28
28
|
|
29
|
-
this.乳房.脂肪分 = this.初期脂肪分
|
29
|
+
this.乳房.脂肪分 = this.初期脂肪分
|
30
30
|
|
31
31
|
}
|
32
32
|
|
5
修正
test
CHANGED
@@ -1,42 +1,36 @@
|
|
1
|
-
|
1
|
+
乳牛を例にして考えてみては? fooやdoSomethingでは抽象的過ぎる気がします。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
#####考察1
|
6
|
-
|
7
|
-
また、クラスの外でdoSomething1を呼び出したときのことを考えるとおかしさがわかります。
|
8
|
-
|
9
|
-
(もちろん、どういったクラスかに多少はよるますが。)
|
10
|
-
|
11
5
|
```javascript
|
12
6
|
|
13
|
-
l
|
7
|
+
class 乳牛 {
|
14
8
|
|
15
|
-
|
9
|
+
constructor () {
|
16
10
|
|
17
|
-
|
11
|
+
this.初期水分量 = 10
|
18
12
|
|
13
|
+
this.初期脂肪分量 = 0
|
14
|
+
|
15
|
+
this.乳房 = { 水分: 123, 脂肪分: 456 }
|
16
|
+
|
17
|
+
this.doSomething1(this.乳房)
|
18
|
+
|
19
|
+
this.doSomething2()
|
20
|
+
|
19
|
-
|
21
|
+
}
|
20
22
|
|
21
23
|
|
22
24
|
|
23
|
-
|
25
|
+
doSomething1(乳牛Xの乳房) { 乳牛Xの乳房.水分 = this.初期水分量 },
|
24
26
|
|
25
|
-
|
27
|
+
doSomething2() {
|
26
28
|
|
27
|
-
|
29
|
+
this.乳房.脂肪分 = this.初期脂肪分量
|
28
30
|
|
29
|
-
|
31
|
+
}
|
30
32
|
|
31
|
-
let 乳牛A = new 乳牛();
|
32
|
-
|
33
|
-
乳牛A.doSomething1(乳牛B.乳房); // 乳牛Bの乳房を引数として与えることができてしまう。これはまずい!
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
// 次のコードが走って、乳牛Aの乳が、乳牛Bの乳房に転移してしまいます。
|
38
|
-
|
39
|
-
|
33
|
+
}
|
40
34
|
|
41
35
|
```
|
42
36
|
|
4
微修正
test
CHANGED
@@ -24,13 +24,19 @@
|
|
24
24
|
|
25
25
|
例えば、fooが乳牛でbarがその乳房だったとします。
|
26
26
|
|
27
|
-
めちゃくちゃ変な感じがします。
|
27
|
+
めちゃくちゃ変な感じがします(この例えも変カモ…)。
|
28
28
|
|
29
29
|
```javascript
|
30
30
|
|
31
31
|
let 乳牛A = new 乳牛();
|
32
32
|
|
33
|
-
乳牛A.doSomething1(乳牛
|
33
|
+
乳牛A.doSomething1(乳牛B.乳房); // 乳牛Bの乳房を引数として与えることができてしまう。これはまずい!
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
// 次のコードが走って、乳牛Aの乳が、乳牛Bの乳房に転移してしまいます。
|
38
|
+
|
39
|
+
doSomething1(arg) { arg.aaa = 10 },
|
34
40
|
|
35
41
|
```
|
36
42
|
|
3
微修正
test
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
#####考察1
|
6
6
|
|
7
|
+
また、クラスの外でdoSomething1を呼び出したときのことを考えるとおかしさがわかります。
|
8
|
+
|
7
|
-
もちろん、どういったクラスかに
|
9
|
+
(もちろん、どういったクラスかに多少はよるますが。)
|
8
10
|
|
9
11
|
```javascript
|
10
12
|
|
@@ -17,6 +19,8 @@
|
|
17
19
|
```
|
18
20
|
|
19
21
|
|
22
|
+
|
23
|
+
#####考察2
|
20
24
|
|
21
25
|
例えば、fooが乳牛でbarがその乳房だったとします。
|
22
26
|
|
@@ -32,6 +36,8 @@
|
|
32
36
|
|
33
37
|
|
34
38
|
|
39
|
+
#####不変性
|
40
|
+
|
35
41
|
渡した引数を変えてはいけないというのは、不変性のことかな~と思います。
|
36
42
|
|
37
43
|
不変性については、例えば [Immutableの利便性、大きなメリットについて。](https://www.pandanoir.info/entry/2015/10/18/191106) こういった記事が見つかります。[Immutable.js](https://facebook.github.io/immutable-js/)のページを見ると、調査のとっかかりになるかもしれませんね。
|
2
追記
test
CHANGED
@@ -1,4 +1,34 @@
|
|
1
|
-
doSomething1は、メソッドの中で自クラスのメンバーの値を参照しているわけではないので、メンバーである必要はなさそう
|
1
|
+
doSomething1は、メソッドの中で自クラスのメンバーの値を参照しているわけではないので、メンバーである必要はなさそう。doSomething2が一般的な気がします。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
また、クラスの外でdoSomething1を呼び出したときのことを考えるとおかしいですよね。
|
6
|
+
|
7
|
+
もちろん、どういったクラスかによる部分は多少あるかもしれませんが。
|
8
|
+
|
9
|
+
```javascript
|
10
|
+
|
11
|
+
let foo = new foo();
|
12
|
+
|
13
|
+
foo.doSomething1(foo.bar); // foo.bar以外が指定されたらおかしくなりそう。見せちゃいけない部分をみせるような作りになってる。
|
14
|
+
|
15
|
+
foo.doSomeghing2();
|
16
|
+
|
17
|
+
```
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
例えば、fooが乳牛でbarがその乳房だったとします。
|
22
|
+
|
23
|
+
めちゃくちゃ変な感じがします。
|
24
|
+
|
25
|
+
```javascript
|
26
|
+
|
27
|
+
let 乳牛A = new 乳牛();
|
28
|
+
|
29
|
+
乳牛A.doSomething1(乳牛A.乳房); // 乳牛Bの乳房を引数として与えることができてしまう。これはまずい!
|
30
|
+
|
31
|
+
```
|
2
32
|
|
3
33
|
|
4
34
|
|
1
微修正
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
doSomething1は、メソッドの中で自クラスのメンバーの値を
|
1
|
+
doSomething1は、メソッドの中で自クラスのメンバーの値を参照しているわけではないので、メンバーである必要はなさそうですが。doSomething2が一般的な気がします。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
5
|
渡した引数を変えてはいけないというのは、不変性のことかな~と思います。
|
6
6
|
|
7
|
-
不変性については、例えば [Immutableの利便性、大きなメリットについて。](https://www.pandanoir.info/entry/2015/10/18/191106) こういった記事が見つかります。[Immutable.js](https://facebook.github.io/immutable-js/)のページを見ると
|
7
|
+
不変性については、例えば [Immutableの利便性、大きなメリットについて。](https://www.pandanoir.info/entry/2015/10/18/191106) こういった記事が見つかります。[Immutable.js](https://facebook.github.io/immutable-js/)のページを見ると、調査のとっかかりになるかもしれませんね。
|