こんにちは。 今日は Pharo の変数の
種類について学びます。
実際のところ 大きく分けて2種類あります。
ローカル変数はコード規約で 必ず小文字で始まります。
ローカル変数の種類については後で見ます。
大きく分けた2つめの種類は 共有変数です。
共有変数はコード規約で 大文字で始まります。
個々の種類を見ると あと数種類あります。
まずは小文字で始まる ローカル変数から始めましょう。
メソッドはローカル変数を持ちます。
パイプ（|）で囲まれて宣言されます。
縦棒です。
ここでは、ローカル変数が1つあります。 c です。
c はメソッド内でローカルで その実行の中でのみ存在します。
したがって必ず小文字で始まらなければ なりません。
ところでクラス名は全て 大文字で始まっています。
システムの中で共有されているからです。
他の種類のローカル変数としては
例えばオブジェクト内の インスタンス変数があります。
オブジェクト内にローカルです。 ここでは2つあります。x と y です。
インスタンス変数も 常に小文字で始まります。
ローカル変数には
メソッドの引数もあります。 これです。
aPoint の a は小文字です。
この変数もメソッド内にローカルだからです。
ブロックの引数もそうです。
:x の場合、x はブロック内に ローカルな変数です。
ブロック引数です。
したがって小文字で始まります。
Pharo には 6種類の特別な変数があります。
特殊変数と呼ばれるものです。 特殊変数の変数名を変えることはできません。
Pharo の予約語です。
Java や JavaScript には 50 種類以上の予約語がありますが
Pharo では たった 6 種類です。
true, false, nil, self, super, thisContext です。
これらの予約語が何であるのか 見てみましょう。
true と false は 真偽値を表すインスタンスです。
true は True クラスの 唯一のインスタンスで
false は False クラスの 唯一のインスタンスです。
nil は UndefinedObject クラスの 唯一のインスタンスです。
true, false, nil は 他のオブジェクトと似たオブジェクトですが
それぞれシステム内の特定のクラスの 唯一のインスタンスです。
次に 3 つの擬似変数です。
self は現在のレシーバーを指します。 Java での this に相当します。
super は常に 現在のレシーバーを指しますが
super にメッセージを送ると
メソッド探索で
（メソッド探索については また別のクラスで説明します）
super と書かれた場所のスーパークラスから メソッド探索を開始します。
thisContext はプログラムの コールスタックを具体化したオブジェクト
を指します。
これは高度な概念で このMOOCの最後で学びます。
あとで説明します。
とりあえずは、thisContextは 擬似変数だということが判れば結構です。
では、共有、あるいは グローバルな変数に進みます。
まず第一に、全てのクラスがあてはまります。
あらゆるクラスの名前は大文字で始まります。
システム中のあらゆる場所から 参照できるからです。
注意してください。大文字で始まる名前が すべてクラスというわけではありません。
例えば Transcript です。
システム中で共有されている あるオブジェクトの名前です。
誰でもこのオブジェクトを参照できます。
Transcript は標準出力です。 他の言語ではよく stdout と呼ばれます。
とあるクラスのインスタンスオブジェクトで グローバルにアクセス可能です。
なので名前が大文字で始まっています。
また、クラス変数もあります。
クラス変数は、クラス定義の ここ classVariableNames で宣言されています。
この CombinedChar クラスでは 2つのクラス変数を定義しています。
1つは Compositions もう1つは Decompositions です。
これら2つのクラス変数は
CombinedChar クラスとそのサブクラスの
インスタンスからアクセス可能です。
それが共有変数と呼ばれる理由です。
そのクラスとサブクラスの全てのインスタンスが それらの変数を共有します。
なのでどちらの変数も大文字で始まります。
まとめると、覚えておくべきことは
全てのローカル変数は オブジェクトやブロックやメソッドにローカルです。
そして小文字で始まります。
グローバル変数は クラス名などで
大文字で始まります。