19.0504
スコープ(scope)
スコープ とは、
プログラムの中で使う 変数 が 使える範囲 のこと
です。
ここで、
使える範囲
という言い方をしましたが、
アクセスできるかどうか
という意味です。
スコープ の話題は、単に、ブロックスコープ/{ } だけではなく、
アクセス修飾子 など(まだ学習中なので、うまく書けません)
いろいろな、側面から見る必要があります。
たとえば、IntelliJ では、同じプロジェクトであれば、ファイルが違っていても、見えるようです。
ここでは、
超基本の
1. { } による、アクセス制限
2. 関数/メソッド の引数 の、アクセスできる範囲(シャドーイング に注意)
について、見ていきます。
1. 基本ルールをマスター
これに関しては、超簡単だと思います。
例えば、
class X constructor() { プロパティ; fun y⇒(引数) { { { } } }⇐ }
こんな、class X が、あるとします(あくまで、イメージ図ですので)。
この時、
1. 同じ色 の { } の中にある 変数 に関して、それより内側から は、アクセスできる。
/(逆に、外側からは、アクセス出来ない/使えない)
/ { } の範囲を、ブロック と言います。
/ そしてこれで、スコープが決められている場合、ブロックスコープ と言います。
2. メソッド y の引数 の範囲は、⇒!ここ!⇐ です(ここは、ブロックの外だが、間違えないように)。
2. 基本を踏まえて、実際のコードで確認します
何が コンソール に 出力 されますか?
例題1:
まずは、このコードでは、何が、コンソール に、出力されるでしょうか?
この問題では、基本の、ブロックスコープ の、考えで、OKです。
答えは、こうなります。
例題2:
この問題でも、「シャドーイング」 が、出てきます。
シャドーイングとは、以前使った変数 と、名前 が、同じであることです。
これにより、うっかり、値を、取り違えることがあります。
Kotlin では、同じブロック内での、シャドーイング は、出来ません。
答は、こうなります。
ここから、色分け が、ありません、、自信があれば、そのまま考えて、なければ、
KotlinPlaygroundなどに、貼り付けて考えてください。
例題3:
この問題は、「引数が、シャドー(影)になる] パターンです。
このパターンが一番間違えやすいかもしれません。
答は、こうなります。
先に述べた、「メソッドの引数 の スコープ」 に、注意してください。
例題4:
これは、thisキーワード を、理解していれば、簡単です。
答は、こうなります。
例題5:
これも、thisキーワード を使っています。
答は、こうなります。
例題6:
これは、だまされないでください。
答は、こうなります。
まとめ
・ スコープ とは、プログラムの中で使う 変数 が 使える範囲 のことです。
・ class X constructor() { プロパティ; fun y⇒(引数) { { { } } }⇐ }
こんな、class X が、あるとします(あくまで、イメージ図ですので)。
この時、
1. 同じ色 の { } の中にある 変数 に関して、それより内側から は、アクセスできる。
/(逆に、外側からは、アクセス出来ない/使えない)
/ { } の範囲を、ブロック と言います。
/ そしてこれで、スコープが決められている場合、ブロックスコープ と言います。
2. メソッド y の引数 の範囲は、⇒!ここ!⇐ です(ここは、ブロックの外だが、間違えないように)。