質問編集履歴

3

2020/04/02 20:20

投稿

mightyMask
mightyMask

スコア143

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- mutableなメソッドを使うのではなく、immutableで自身のクラスのオブジェクトを返すメソッドを用いて毎度再代入する事が推奨らしいですが、ボトルネックの原因になりそうで怖いです。
33
+ mutableなメソッドを使うのではなく、immutableで自身のクラスのインスタンスを返すメソッドを用いて毎度再代入する事が推奨らしいですが、ボトルネックの原因になりそうで怖いです。
34
34
 
35
35
 
36
36
 

2

2020/04/02 20:20

投稿

mightyMask
mightyMask

スコア143

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,15 @@
61
61
  `val`で宣言された変数はimmutable、`var`で宣言された変数はmutableだと勘違いしてこの質問をしたのですが、どうやら`val`は参照の変更を制限するだけのようです。
62
62
 
63
63
  前者のような仕様になっている他の言語も利用しているもので、同じ感覚でやりたかったので。
64
+
65
+
66
+
67
+ `val`の利点は、宣言したところから値が変わらない事が保証される事だと思っているのですが、Scalaのこの仕様だとこの恩恵を受けるためにはimmutableなクラス、つまりmutableなメソッドが一つもないようなクラスのインスタンスを`val`で宣言する必要があるため、mutableなクラスとimmutableなクラスの2つ用意する必要があるわけですよね。
68
+
69
+ `Array`と`ArrayBuffer`があるのはそういった理由だと思っているのですが。
70
+
71
+
72
+
73
+ 自作のクラスで2つ用意するのはめんどくさいというか、なんかおかしい気がします。
74
+
75
+ mutableなメソッドだという意味の修飾子だかアノテーションだかがあって、`var`で宣言されていないと使えないという機能があればわざわざクラスを2つ用意する必要もないわけです。

1

2020/04/02 20:18

投稿

mightyMask
mightyMask

スコア143

test CHANGED
File without changes
test CHANGED
@@ -26,11 +26,17 @@
26
26
 
27
27
  このようなコードでコンパイルが通ってしまうのが嫌です。
28
28
 
29
+ 変数`a`を`val`で宣言しているのに値を変更できてしまうからです。
30
+
31
+
32
+
29
- immutableメソッドを用いて毎度再代入する事が推奨らしいですが、ボトルネックの原因になりそうで怖いです。
33
+ mutableなメソッドを使うのではなく、immutableで自身のクラスのオブジェクトを返すメソッドを用いて毎度再代入する事が推奨らしいですが、ボトルネックの原因になりそうで怖いです。
30
34
 
31
35
 
32
36
 
33
37
  `def inc = ...` のところに修飾子?アノテーション?をつけてコンパイラに伝えるのが理想です。
38
+
39
+ `var`で宣言された変数でしか利用できないようなメソッドにしたいです。
34
40
 
35
41
 
36
42
 
@@ -40,8 +46,18 @@
40
46
 
41
47
 
42
48
 
43
- 標準ライブラリでは、Listの末尾に追加するメソッドはimmutableで`:+`、mutableで`:+=`みたいな感じで語尾に`=`をつけて統一しているようですが、修飾子で定義したメソッドでの例は見つけられませんでした。
49
+ 標準ライブラリでは、Listの末尾に追加するメソッドはimmutableで`:+`、mutableで`:+=`みたいな感じで語尾に`=`をつけて統一しているようですが、識別子で定義したメソッドでの例は見つけられませんでした。
44
50
 
45
51
 
46
52
 
47
- 理想としては、メソッドの名前は同じにして、普段はメソッドをつなげる時`.`を使いますが、mutableなメソッドに対しては`:`とかを使う感じの記法とか良いと思うのですが。
53
+ 理想としては、メソッドの名前は同じにして、普段はメソッドをつなげる時`.`を使いますが、mutableなメソッドに対しては代わりに`:`とかを使う感じの記法とか良いと思うのですが。
54
+
55
+ メタプログラミングでグチャグチャやれば出来ない事も無さそうですかね。
56
+
57
+
58
+
59
+ #追記
60
+
61
+ `val`で宣言された変数はimmutable、`var`で宣言された変数はmutableだと勘違いしてこの質問をしたのですが、どうやら`val`は参照の変更を制限するだけのようです。
62
+
63
+ 前者のような仕様になっている他の言語も利用しているもので、同じ感覚でやりたかったので。