1 00:00:00,360 --> 00:00:03,120 こんにちは。 今日は Pharo の変数の 2 00:00:03,280 --> 00:00:05,640 種類について学びます。 3 00:00:05,800 --> 00:00:07,840 実際のところ 大きく分けて2種類あります。 4 00:00:08,000 --> 00:00:13,280 ローカル変数はコード規約で 必ず小文字で始まります。 5 00:00:13,440 --> 00:00:15,920 ローカル変数の種類については後で見ます。 6 00:00:16,080 --> 00:00:18,800 大きく分けた2つめの種類は 共有変数です。 7 00:00:18,960 --> 00:00:22,560 共有変数はコード規約で 大文字で始まります。 8 00:00:22,720 --> 00:00:24,640 個々の種類を見ると あと数種類あります。 9 00:00:25,600 --> 00:00:29,120 まずは小文字で始まる ローカル変数から始めましょう。 10 00:00:29,280 --> 00:00:31,360 メソッドはローカル変数を持ちます。 11 00:00:31,520 --> 00:00:36,000 パイプ(|)で囲まれて宣言されます。 12 00:00:36,160 --> 00:00:37,400 縦棒です。 13 00:00:37,560 --> 00:00:39,920 ここでは、ローカル変数が1つあります。 c です。 14 00:00:40,080 --> 00:00:43,760 c はメソッド内でローカルで その実行の中でのみ存在します。 15 00:00:43,920 --> 00:00:46,960 したがって必ず小文字で始まらなければ なりません。 16 00:00:47,120 --> 00:00:51,840 ところでクラス名は全て 大文字で始まっています。 17 00:00:52,000 --> 00:00:55,120 システムの中で共有されているからです。 18 00:00:56,800 --> 00:00:59,640 他の種類のローカル変数としては 19 00:00:59,800 --> 00:01:03,560 例えばオブジェクト内の インスタンス変数があります。 20 00:01:03,720 --> 00:01:07,120 オブジェクト内にローカルです。 ここでは2つあります。x と y です。 21 00:01:07,280 --> 00:01:09,640 インスタンス変数も 常に小文字で始まります。 22 00:01:09,800 --> 00:01:11,880 ローカル変数には 23 00:01:12,040 --> 00:01:15,560 メソッドの引数もあります。 これです。 24 00:01:16,280 --> 00:01:19,760 aPoint の a は小文字です。 25 00:01:19,920 --> 00:01:22,840 この変数もメソッド内にローカルだからです。 26 00:01:23,000 --> 00:01:26,880 ブロックの引数もそうです。 27 00:01:27,040 --> 00:01:31,880 :x の場合、x はブロック内に ローカルな変数です。 28 00:01:32,040 --> 00:01:34,320 ブロック引数です。 29 00:01:34,480 --> 00:01:37,280 したがって小文字で始まります。 30 00:01:39,160 --> 00:01:43,440 Pharo には 6種類の特別な変数があります。 31 00:01:43,600 --> 00:01:46,840 特殊変数と呼ばれるものです。 特殊変数の変数名を変えることはできません。 32 00:01:47,000 --> 00:01:48,720 Pharo の予約語です。 33 00:01:48,880 --> 00:01:52,640 Java や JavaScript には 50 種類以上の予約語がありますが 34 00:01:52,800 --> 00:01:54,160 Pharo では たった 6 種類です。 35 00:01:54,320 --> 00:01:57,720 true, false, nil, self, super, thisContext です。 36 00:01:57,880 --> 00:02:01,640 これらの予約語が何であるのか 見てみましょう。 37 00:02:01,800 --> 00:02:04,360 true と false は 真偽値を表すインスタンスです。 38 00:02:04,520 --> 00:02:07,240 true は True クラスの 唯一のインスタンスで 39 00:02:07,400 --> 00:02:10,160 false は False クラスの 唯一のインスタンスです。 40 00:02:10,320 --> 00:02:13,760 nil は UndefinedObject クラスの 唯一のインスタンスです。 41 00:02:13,920 --> 00:02:16,960 true, false, nil は 他のオブジェクトと似たオブジェクトですが 42 00:02:17,120 --> 00:02:21,200 それぞれシステム内の特定のクラスの 唯一のインスタンスです。 43 00:02:21,800 --> 00:02:24,160 次に 3 つの擬似変数です。 44 00:02:24,320 --> 00:02:28,720 self は現在のレシーバーを指します。 Java での this に相当します。 45 00:02:28,880 --> 00:02:31,520 super は常に 現在のレシーバーを指しますが 46 00:02:31,680 --> 00:02:34,880 super にメッセージを送ると 47 00:02:35,040 --> 00:02:38,720 メソッド探索で 48 00:02:38,880 --> 00:02:40,960 (メソッド探索については  また別のクラスで説明します) 49 00:02:41,120 --> 00:02:45,840 super と書かれた場所のスーパークラスから メソッド探索を開始します。 50 00:02:46,800 --> 00:02:51,000 thisContext はプログラムの コールスタックを具体化したオブジェクト 51 00:02:51,160 --> 00:02:53,400 を指します。 52 00:02:53,560 --> 00:02:57,280 これは高度な概念で このMOOCの最後で学びます。 53 00:02:57,440 --> 00:03:00,080 あとで説明します。 54 00:03:00,240 --> 00:03:03,360 とりあえずは、thisContextは 擬似変数だということが判れば結構です。 55 00:03:04,760 --> 00:03:08,120 では、共有、あるいは グローバルな変数に進みます。 56 00:03:08,280 --> 00:03:10,680 まず第一に、全てのクラスがあてはまります。 57 00:03:10,840 --> 00:03:14,120 あらゆるクラスの名前は大文字で始まります。 58 00:03:14,280 --> 00:03:17,680 システム中のあらゆる場所から 参照できるからです。 59 00:03:18,480 --> 00:03:22,160 注意してください。大文字で始まる名前が すべてクラスというわけではありません。 60 00:03:22,320 --> 00:03:24,600 例えば Transcript です。 61 00:03:24,760 --> 00:03:29,640 システム中で共有されている あるオブジェクトの名前です。 62 00:03:29,800 --> 00:03:32,840 誰でもこのオブジェクトを参照できます。 63 00:03:33,000 --> 00:03:36,640 Transcript は標準出力です。 他の言語ではよく stdout と呼ばれます。 64 00:03:36,800 --> 00:03:40,120 とあるクラスのインスタンスオブジェクトで グローバルにアクセス可能です。 65 00:03:40,280 --> 00:03:42,880 なので名前が大文字で始まっています。 66 00:03:45,440 --> 00:03:48,280 また、クラス変数もあります。 67 00:03:48,440 --> 00:03:52,840 クラス変数は、クラス定義の ここ classVariableNames で宣言されています。 68 00:03:53,000 --> 00:03:56,520 この CombinedChar クラスでは 2つのクラス変数を定義しています。 69 00:03:56,680 --> 00:03:59,920 1つは Compositions もう1つは Decompositions です。 70 00:04:00,080 --> 00:04:02,200 これら2つのクラス変数は 71 00:04:02,360 --> 00:04:06,040 CombinedChar クラスとそのサブクラスの 72 00:04:06,200 --> 00:04:09,000 インスタンスからアクセス可能です。 73 00:04:09,160 --> 00:04:11,880 それが共有変数と呼ばれる理由です。 74 00:04:12,040 --> 00:04:15,480 そのクラスとサブクラスの全てのインスタンスが それらの変数を共有します。 75 00:04:15,640 --> 00:04:19,240 なのでどちらの変数も大文字で始まります。 76 00:04:19,400 --> 00:04:22,080 まとめると、覚えておくべきことは 77 00:04:22,240 --> 00:04:27,520 全てのローカル変数は オブジェクトやブロックやメソッドにローカルです。 78 00:04:27,680 --> 00:04:29,760 そして小文字で始まります。 79 00:04:29,920 --> 00:04:33,600 グローバル変数は クラス名などで 80 00:04:33,760 --> 00:04:35,600 大文字で始まります。