回答編集履歴
9
文章の修正
answer
CHANGED
@@ -22,13 +22,13 @@
|
|
22
22
|
|
23
23
|
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した別人の山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。`cat`、`cat_1`についても同じです。
|
24
24
|
|
25
|
-
`me`、`me_1`、`me_2` や `cat`、`cat_1` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルである
|
25
|
+
`me`、`me_1`、`me_2` や `cat`、`cat_1` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルである方が都合が良いのではないでしょうか。
|
26
26
|
|
27
27
|
---
|
28
28
|
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を1つ挙げるなら **硬貨** でしょうか。
|
29
29
|
|
30
30
|
硬貨の金銭的価値(フィールドの値)は最初(インスタンス生成時)に決めると思いますが、途中でその価値が変化すると困る場合があります。いえ、おそらく困ります。
|
31
31
|
|
32
|
-
明日から我々が使っている100円玉の価値が50円になったら困りますよね。硬貨に 100 と書いてあるはずなのに金銭的価値は 50 円です。私なら困ります。半額で自動販売機でジュースが買えたり、アーケードゲームが遊べて一部の人たちはラッキーかもしれませんが、それ
|
32
|
+
明日から我々が使っている100円玉の価値が50円になったら困りますよね。硬貨に 100 と書いてあるはずなのに金銭的価値は 50 円です。私なら困ります。半額で自動販売機でジュースが買えたり、アーケードゲームが遊べて一部の人たちはラッキーかもしれませんが、それ等で商売している人たちはきっと困るでしょうね。
|
33
33
|
|
34
|
-
|
34
|
+
ですから、硬貨をオブジェクトとして表現する際はイミュータブルである方が都合が良いでしょう。
|
8
文章の修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した別人の山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。`cat`、`cat_1`についても同じです。
|
24
24
|
|
25
|
-
`me`、`me_1`、`me_2` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルであるべきではないでしょうか。
|
25
|
+
`me`、`me_1`、`me_2` や `cat`、`cat_1` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルであるべきではないでしょうか。
|
26
26
|
|
27
27
|
---
|
28
28
|
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を1つ挙げるなら **硬貨** でしょうか。
|
7
文章の修正
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
> イミュータブルなオブジェクト同士が相互参照している場合はどのように対処すれば良いのか?
|
13
13
|
|
14
|
-
に
|
14
|
+
に対する回答は「イミュータブルにすることをやめて、 `me.age = 40;`と書く」 です。
|
15
15
|
|
16
16
|
> me.copyWith(pets: me.pets + cat);
|
17
17
|
> me_1.copyWith(age: 40);
|
6
文章の修正
answer
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
今回のケースでは、姓名が変わろうが歳を取ろうがその山田さんは同一人物でしょう。
|
22
22
|
|
23
|
-
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。
|
23
|
+
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した別人の山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。`cat`、`cat_1`についても同じです。
|
24
24
|
|
25
25
|
`me`、`me_1`、`me_2` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルであるべきではないでしょうか。
|
26
26
|
|
5
誤記
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。ペットについても同様です。
|
24
24
|
|
25
|
-
`me`、`me_1`、`me_2` が同一の人物を指しているのであれば `
|
25
|
+
`me`、`me_1`、`me_2` が同一の人物を指しているのであれば `Person`や`Pet`はミュータブルであるべきではないでしょうか。
|
26
26
|
|
27
27
|
---
|
28
28
|
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を1つ挙げるなら **硬貨** でしょうか。
|
4
文章の修正
answer
CHANGED
@@ -5,8 +5,17 @@
|
|
5
5
|
> イミュータブルなオブジェクト同士が相互参照するような設計は避けるべき
|
6
6
|
|
7
7
|
ケースバイケースです。今回の`Person`と`Pet`の関係であれば相互参照をして良いと思います。
|
8
|
-
しかし、イミュータブルである必要性はありません。
|
8
|
+
しかし、イミュータブルである必要性はありません。
|
9
9
|
|
10
|
+
ですから、
|
11
|
+
|
12
|
+
> イミュータブルなオブジェクト同士が相互参照している場合はどのように対処すれば良いのか?
|
13
|
+
|
14
|
+
についてはイミュータブルにすることをやめて、 `me.age = 40;` で良いでしょう。
|
15
|
+
|
16
|
+
> me.copyWith(pets: me.pets + cat);
|
17
|
+
> me_1.copyWith(age: 40);
|
18
|
+
|
10
19
|
`me`、`me_1`、`me_2`のように変更のたびインスタンスのコピーを生成していてはまるでたまたま遺伝子が同じのコピー人間を生成しているようです。
|
11
20
|
|
12
21
|
今回のケースでは、姓名が変わろうが歳を取ろうがその山田さんは同一人物でしょう。
|
3
文章の修正
answer
CHANGED
@@ -11,13 +11,15 @@
|
|
11
11
|
|
12
12
|
今回のケースでは、姓名が変わろうが歳を取ろうがその山田さんは同一人物でしょう。
|
13
13
|
|
14
|
-
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した山田さん**を生成しているようで、違和感を感じます。
|
14
|
+
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した山田さん**を生成しているようで、違和感を感じます。生成された `me`、`me_1`、`me_2`は それぞれ **別人** だと思います。ペットについても同様です。
|
15
15
|
|
16
|
-
|
16
|
+
`me`、`me_1`、`me_2` が同一の人物を指しているのであれば `Human`や`Pet`はミュータブルであるべきではないでしょうか。
|
17
17
|
|
18
18
|
---
|
19
|
-
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を挙げるなら **硬貨** でしょうか。
|
19
|
+
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を1つ挙げるなら **硬貨** でしょうか。
|
20
20
|
|
21
|
-
硬貨の金銭的価値(フィールドの値)は最初(インスタンス生成時)に決めると思いますが、途中でその価値が変化すると困る場合があります。
|
21
|
+
硬貨の金銭的価値(フィールドの値)は最初(インスタンス生成時)に決めると思いますが、途中でその価値が変化すると困る場合があります。いえ、おそらく困ります。
|
22
22
|
|
23
|
-
明日から我々が使っている100円玉の価値が
|
23
|
+
明日から我々が使っている100円玉の価値が50円になったら困りますよね。硬貨に 100 と書いてあるはずなのに金銭的価値は 50 円です。私なら困ります。半額で自動販売機でジュースが買えたり、アーケードゲームが遊べて一部の人たちはラッキーかもしれませんが、それを商売している側の人たちは確実に困りますね。
|
24
|
+
|
25
|
+
cn202kさんも困ると感じたなら、それはイミュータブルであるべきです。
|
2
文章の修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> このあとme_1.ageを30から40に変更しようと思ったら
|
2
2
|
|
3
|
-
この時点でイミュータブルをやめます。
|
3
|
+
**この時点でイミュータブルをやめます。**
|
4
4
|
|
5
5
|
> イミュータブルなオブジェクト同士が相互参照するような設計は避けるべき
|
6
6
|
|
@@ -9,12 +9,15 @@
|
|
9
9
|
|
10
10
|
`me`、`me_1`、`me_2`のように変更のたびインスタンスのコピーを生成していてはまるでたまたま遺伝子が同じのコピー人間を生成しているようです。
|
11
11
|
|
12
|
+
今回のケースでは、姓名が変わろうが歳を取ろうがその山田さんは同一人物でしょう。
|
13
|
+
|
14
|
+
その山田さんをコピーをしていては**姓名と年齢と遺伝子の1部がたまたま一致した山田さん**を生成しているようで、違和感を感じます。それは **実質的な別人** だと思います。ペットについても同様です。
|
15
|
+
|
16
|
+
ですから、`Human`や`Pet`はミュータブルであるべきではないでしょうか。
|
17
|
+
|
12
18
|
---
|
13
19
|
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を挙げるなら **硬貨** でしょうか。
|
14
20
|
|
15
|
-
硬貨の金銭的価値(フィールドの値)は最初(インスタンス生成時)に
|
21
|
+
硬貨の金銭的価値(フィールドの値)は最初(インスタンス生成時)に決めると思いますが、途中でその価値が変化すると困る場合があります。というより困ります。
|
16
22
|
|
17
|
-
今回のケースでは、きっと姓名が変わろうが歳を取ろうがその山田さんは同一人物でしょう。
|
18
|
-
|
23
|
+
明日から我々が使っている100円玉の価値がもし50円になったら困りますよね。100と書いてあるのに価値は50円です。私は困ります。もしcn202kさんも困ると感じたなら、それをイミュータブルにしましょう。
|
19
|
-
|
20
|
-
ですから、`Human`や`Pet`はイミュータブルの方が分かりやすいのではないでしょうか。
|
1
文章の修正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
ケースバイケースです。今回の`Person`と`Pet`の関係であれば相互参照をして良いと思います。
|
8
8
|
しかし、イミュータブルである必要性はありません。`me.age = 40;` で良いでしょう。
|
9
9
|
|
10
|
-
`me`、`me_1`、`me_2`のように変更のたびインスタンスのコピーを生成していてはまるで遺伝子が
|
10
|
+
`me`、`me_1`、`me_2`のように変更のたびインスタンスのコピーを生成していてはまるでたまたま遺伝子が同じのコピー人間を生成しているようです。
|
11
11
|
|
12
12
|
---
|
13
13
|
現実世界のオブジェクトでたとえ話をするのは混乱を招くような気がしますが…、イミュータブルであるべきオブジェクトの例を挙げるなら **硬貨** でしょうか。
|