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

回答編集履歴

2

余計な文章を削除

2021/11/22 10:08

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -37,8 +37,6 @@
37
37
  A1では初めて宣言されたものです。A2では本来はフィールドにアクセスしたいのだろうと思いますが、実際にはA1の方のものになります。
38
38
  そうなると、初期化されていない変数を使う状態になります。
39
39
 
40
- かといって、なんでもかんでも変数はすべてフィールドにすると、C言語いうローカル変数ような状態になりま。C言語ですら非推奨なものです。
40
+ かといって、なんでもかんでも変数はすべてフィールドにすると、どこからもアクセスできるで、デバッグるのが大変です。それにオブジェクト指向考え方を壊す原因もありま
41
- どこからでもアクセスできるので、デバッグするのが大変だからです。
42
- それにオブジェクト指向の考え方を壊す原因でもありますし。
43
41
 
44
42
  なので『「どのようにすべきか」は、場合による』ですね。

1

追記0

2021/11/22 10:08

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -3,4 +3,42 @@
3
3
 
4
4
  (クラスやオブジェクト指向がネックになっていますが、大抵の書籍やサイトではがっつり解説されているはずなので。わかりやすいかどうかはともかく)
5
5
 
6
- (一時中断)
6
+ ```C#
7
+ using System.Collections;
8
+ using System.Collections.Generic;
9
+ using UnityEngine;
10
+
11
+ public class a : MonoBehaviour
12
+
13
+ {
14
+ int A = 0;
15
+
16
+ void Start()
17
+ { }
18
+ void Update()
19
+ {
20
+ if (Input.GetKey(KeyCode.R))
21
+ {int A = A + 1; }
22
+ }
23
+ }
24
+ ```
25
+
26
+ 上部にある変数Aは**フィールド**と言います。
27
+ Updateメソッドで宣言されたAは(ローカル)変数と言います。
28
+ スコープ、つまり使用可能な範囲が全く違います。
29
+
30
+ ローカル変数は基本的にメソッドから抜けると消滅します。
31
+ フィールドはクラスオブジェクトが破棄されない限りは保持されます。
32
+
33
+ 今回の場合、``int A = A + 1;``のようにやっていますが、
34
+ 基本的にその行に近いものが使われます。
35
+
36
+ わかりやすくするために、``int A1 = A2 + 1;``としましょうか。
37
+ A1では初めて宣言されたものです。A2では本来はフィールドにアクセスしたいのだろうと思いますが、実際にはA1の方のものになります。
38
+ そうなると、初期化されていない変数を使う状態になります。
39
+
40
+ かといって、なんでもかんでも変数はすべてフィールドにすると、C言語でいうローカル変数のような状態になります。C言語ですら非推奨なものです。
41
+ どこからでもアクセスできるので、デバッグするのが大変だからです。
42
+ それにオブジェクト指向の考え方を壊す原因でもありますし。
43
+
44
+ なので『「どのようにすべきか」は、場合による』ですね。