回答編集履歴

2

余計な文章を削除

2021/11/22 10:08

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -76,11 +76,7 @@
76
76
 
77
77
 
78
78
 
79
- かといって、なんでもかんでも変数はすべてフィールドにすると、C言語いうローカル変数ような状態になりま。C言語ですら非推奨なものです。
79
+ かといって、なんでもかんでも変数はすべてフィールドにすると、どこからもアクセスできるで、デバッグるのが大変です。それにオブジェクト指向考え方を壊す原因もありま
80
-
81
- どこからでもアクセスできるので、デバッグするのが大変だからです。
82
-
83
- それにオブジェクト指向の考え方を壊す原因でもありますし。
84
80
 
85
81
 
86
82
 

1

追記0

2021/11/22 10:08

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -8,4 +8,80 @@
8
8
 
9
9
 
10
10
 
11
- (一時中断)
11
+ ```C#
12
+
13
+ using System.Collections;
14
+
15
+ using System.Collections.Generic;
16
+
17
+ using UnityEngine;
18
+
19
+
20
+
21
+ public class a : MonoBehaviour
22
+
23
+
24
+
25
+ {
26
+
27
+ int A = 0;
28
+
29
+
30
+
31
+ void Start()
32
+
33
+ { }
34
+
35
+ void Update()
36
+
37
+ {
38
+
39
+ if (Input.GetKey(KeyCode.R))
40
+
41
+ {int A = A + 1; }
42
+
43
+ }
44
+
45
+ }
46
+
47
+ ```
48
+
49
+
50
+
51
+ 上部にある変数Aは**フィールド**と言います。
52
+
53
+ Updateメソッドで宣言されたAは(ローカル)変数と言います。
54
+
55
+ スコープ、つまり使用可能な範囲が全く違います。
56
+
57
+
58
+
59
+ ローカル変数は基本的にメソッドから抜けると消滅します。
60
+
61
+ フィールドはクラスオブジェクトが破棄されない限りは保持されます。
62
+
63
+
64
+
65
+ 今回の場合、``int A = A + 1;``のようにやっていますが、
66
+
67
+ 基本的にその行に近いものが使われます。
68
+
69
+
70
+
71
+ わかりやすくするために、``int A1 = A2 + 1;``としましょうか。
72
+
73
+ A1では初めて宣言されたものです。A2では本来はフィールドにアクセスしたいのだろうと思いますが、実際にはA1の方のものになります。
74
+
75
+ そうなると、初期化されていない変数を使う状態になります。
76
+
77
+
78
+
79
+ かといって、なんでもかんでも変数はすべてフィールドにすると、C言語でいうローカル変数のような状態になります。C言語ですら非推奨なものです。
80
+
81
+ どこからでもアクセスできるので、デバッグするのが大変だからです。
82
+
83
+ それにオブジェクト指向の考え方を壊す原因でもありますし。
84
+
85
+
86
+
87
+ なので『「どのようにすべきか」は、場合による』ですね。