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