そもそもスコープとは?
スコープはプログラムのオブジェクトの参照可能な範囲です。
定義する変数やオブジェクトには使用できる範囲が決まっています。そうすることで、極力想定外のことが発生しないようにしておきます。
これは実際に様々な機能を持たせたソフトやアプリを開発していると身をもって大切さを知ります。
では、スコープは参照可能な範囲と言いましたが、スコープを広くした場合と狭くした場合のメリット。デメリットを挙げていきます。
スコープの範囲が広い場合のメリット・デメリット
| 広い場合 | 狭い場合 | |
|---|---|---|
| エラー発生時 |
|
|
| オブジェクトの扱いの利便性 |
|
|
以上のように、それぞれメリット・デメリットがありますが、基本的にはスコープは狭い方が良いですし、一般的です。
やはり、エラーの特定のしやすさなどを考えると狭い方が都合が良いからです。
ですが、保存できるファイルの最大数など、アプリ全体で使用するものは最大までスコープを広くしておくのが適切です。
用語を使うなら、グローバル変数にした方が良いです。グローバル変数とは、メソッドの外で定義されている変数のことです。
逆に、とある画面の文言など、使用する範囲が一部分のものに関しては狭くする方が良いです。
スコープの設定の仕方
基本的に、オブジェクトのスコープは「{」から「}」までです。
メソッド内で定義したものならメソッド内のみ、if文やfor文の中で定義したものはそのif文やfor文でのみ使用可能な変数になります。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class ScopeExample {
// ScopeExampleクラス内全体で使える変数
int attackValue = 100;
int damageCalc (int damage, double rate) {
// damageCalcメソッド内のみで使える変数
double revisdDamage = damage * rate;
BigDecimal bd = new BigDecimal(String.valueOf(revisdDamage));
BigDecimal bd1 = bd.setScale(0, RoundingMode.UP);
int decidedDamage = bd1.intValue();
boolean critical = true;
if (critical) {
// if文内のみ使える変数
int enemyDeffence = 400;
decidedDamage += enemyDeffence;
}
return decidedDamage;
}
void gigaSlashAttack() {
this.damageCalc(this.attackValue, 2.3);
}
}