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

回答編集履歴

10

修正

2018/10/25 02:03

投稿

退会済みユーザー
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
- doSomething2ですがこれは、ただの初期化です。
36
+ #####
23
-
24
37
  不変性を絡めた質問をしたかったと考えると、
25
38
  次に示すdoSomething3, 4みたいなことを例にしたかったとか?この場合、引数をクローンしておかないと、乳房を共有することになっておかしくなっちゃいます。
26
39
  ```javascript

9

修正

2018/10/25 02:02

投稿

退会済みユーザー
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

修正

2018/10/25 01:46

投稿

退会済みユーザー
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
- その、もしかしてdoSomething3, 4みたいなことを例にしたかったのでは
22
+ 次に示すdoSomething3, 4みたいなことを例にしたかったとか
22
23
  ```javascript
23
24
  class 乳牛 {
24
25
  constructor () {

7

修正

2018/10/25 01:39

投稿

退会済みユーザー
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

微修正

2018/10/25 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -3,16 +3,16 @@
3
3
  ```javascript
4
4
  class 乳牛 {
5
5
  constructor () {
6
- this.初期水分 = 10
6
+ this.初期水分 = 10
7
- this.初期脂肪分 = 0
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

修正

2018/10/25 01:28

投稿

退会済みユーザー
answer CHANGED
@@ -1,23 +1,20 @@
1
- doSomething1は、メソッドの中で自クラスのメンバーの値参照しているわけでないの、メンバーである必要なさそう。doSomething2が一般気がします。
1
+ 乳牛例にして考えてみて? fooやdoSomethingでは抽象過ぎる気がします。
2
2
 
3
- #####考察1
4
- また、クラスの外でdoSomething1を呼び出したときのことを考えるとおかしさがわかります。
5
- (もちろん、どういったクラスかに多少はよるますが。)
6
3
  ```javascript
4
+ class 乳牛 {
7
- let foo = new foo();
5
+ constructor () {
6
+ this.初期水分量 = 10
7
+ this.初期脂肪分量 = 0
8
+ this.乳房 = { 水分: 123, 脂肪分: 456 }
8
- foo.doSomething1(foo.bar); // foo.bar以外が指定されたらおかしくなりそう。見せちゃいけない部分をみせるような作りになってる。
9
+ this.doSomething1(this.乳房)
9
- foo.doSomeghing2();
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(arg) { arg.aaa = 10 },
13
+ doSomething1(乳牛Xの乳房) { 乳牛Xの乳房.水分 = this.初期水分量 },
14
+ doSomething2() {
15
+ this.乳房.脂肪分 = this.初期脂肪分量
16
+ }
17
+ }
21
18
  ```
22
19
 
23
20
  #####不変性

4

微修正

2018/10/25 01:27

投稿

退会済みユーザー
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(乳牛A.乳房); // 乳牛Bの乳房を引数として与えることができてしまう。これはまずい!
17
+ 乳牛A.doSomething1(乳牛B.乳房); // 乳牛Bの乳房を引数として与えることができてしまう。これはまずい!
18
+
19
+ // 次のコードが走って、乳牛Aの乳が、乳牛Bの乳房に転移してしまいます。
20
+ doSomething1(arg) { arg.aaa = 10 },
18
21
  ```
19
22
 
20
23
  #####不変性

3

微修正

2018/10/25 01:09

投稿

退会済みユーザー
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

追記

2018/10/25 01:04

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,19 @@
1
- doSomething1は、メソッドの中で自クラスのメンバーの値を参照しているわけではないので、メンバーである必要はなさそうですが。doSomething2が一般的な気がします。
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

微修正

2018/10/25 01:02

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- doSomething1は、メソッドの中で自クラスのメンバーの値を変更しているわけではないので、メンバーである必要はなさそうですが。doSomething2が一般的な気がします。
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/)のページを見ると、調査のとっかかりになるかもしれませんね。