WEBVTT

00:00:00.360 --> 00:00:03.120 align:middle
こんにちは。
今日は Pharo の変数の

00:00:03.280 --> 00:00:05.640 align:middle
種類について学びます。

00:00:05.800 --> 00:00:07.840 align:middle
実際のところ
大きく分けて2種類あります。

00:00:08.000 --> 00:00:13.280 align:middle
ローカル変数はコード規約で
必ず小文字で始まります。

00:00:13.440 --> 00:00:15.920 align:middle
ローカル変数の種類については後で見ます。

00:00:16.080 --> 00:00:18.800 align:middle
大きく分けた2つめの種類は
共有変数です。

00:00:18.960 --> 00:00:22.560 align:middle
共有変数はコード規約で
大文字で始まります。

00:00:22.720 --> 00:00:24.640 align:middle
個々の種類を見ると
あと数種類あります。

00:00:25.600 --> 00:00:29.120 align:middle
まずは小文字で始まる
ローカル変数から始めましょう。

00:00:29.280 --> 00:00:31.360 align:middle
メソッドはローカル変数を持ちます。

00:00:31.520 --> 00:00:36.000 align:middle
パイプ（|）で囲まれて宣言されます。

00:00:36.160 --> 00:00:37.400 align:middle
縦棒です。

00:00:37.560 --> 00:00:39.920 align:middle
ここでは、ローカル変数が1つあります。
c です。

00:00:40.080 --> 00:00:43.760 align:middle
c はメソッド内でローカルで
その実行の中でのみ存在します。

00:00:43.920 --> 00:00:46.960 align:middle
したがって必ず小文字で始まらなければ
なりません。

00:00:47.120 --> 00:00:51.840 align:middle
ところでクラス名は全て
大文字で始まっています。

00:00:52.000 --> 00:00:55.120 align:middle
システムの中で共有されているからです。

00:00:56.800 --> 00:00:59.640 align:middle
他の種類のローカル変数としては

00:00:59.800 --> 00:01:03.560 align:middle
例えばオブジェクト内の
インスタンス変数があります。

00:01:03.720 --> 00:01:07.120 align:middle
オブジェクト内にローカルです。
ここでは2つあります。x と y です。

00:01:07.280 --> 00:01:09.640 align:middle
インスタンス変数も
常に小文字で始まります。

00:01:09.800 --> 00:01:11.880 align:middle
ローカル変数には

00:01:12.040 --> 00:01:15.560 align:middle
メソッドの引数もあります。
これです。

00:01:16.280 --> 00:01:19.760 align:middle
aPoint の a は小文字です。

00:01:19.920 --> 00:01:22.840 align:middle
この変数もメソッド内にローカルだからです。

00:01:23.000 --> 00:01:26.880 align:middle
ブロックの引数もそうです。

00:01:27.040 --> 00:01:31.880 align:middle
:x の場合、x はブロック内に
ローカルな変数です。

00:01:32.040 --> 00:01:34.320 align:middle
ブロック引数です。

00:01:34.480 --> 00:01:37.280 align:middle
したがって小文字で始まります。

00:01:39.160 --> 00:01:43.440 align:middle
Pharo には
6種類の特別な変数があります。

00:01:43.600 --> 00:01:46.840 align:middle
特殊変数と呼ばれるものです。
特殊変数の変数名を変えることはできません。

00:01:47.000 --> 00:01:48.720 align:middle
Pharo の予約語です。

00:01:48.880 --> 00:01:52.640 align:middle
Java や JavaScript には
50 種類以上の予約語がありますが

00:01:52.800 --> 00:01:54.160 align:middle
Pharo では
たった 6 種類です。

00:01:54.320 --> 00:01:57.720 align:middle
true, false, nil, self, super, thisContext
です。

00:01:57.880 --> 00:02:01.640 align:middle
これらの予約語が何であるのか
見てみましょう。

00:02:01.800 --> 00:02:04.360 align:middle
true と false は
真偽値を表すインスタンスです。

00:02:04.520 --> 00:02:07.240 align:middle
true は True クラスの
唯一のインスタンスで

00:02:07.400 --> 00:02:10.160 align:middle
false は False クラスの
唯一のインスタンスです。

00:02:10.320 --> 00:02:13.760 align:middle
nil は UndefinedObject クラスの
唯一のインスタンスです。

41 align:middle
00:02:13,920 --> 00:02:16,960
true, false, nil は
他のオブジェクトと似たオブジェクトですが

00:02:17.120 --> 00:02:21.200 align:middle
それぞれシステム内の特定のクラスの
唯一のインスタンスです。

00:02:21.800 --> 00:02:24.160 align:middle
次に 3 つの擬似変数です。

00:02:24.320 --> 00:02:28.720 align:middle
self は現在のレシーバーを指します。
Java での this に相当します。

00:02:28.880 --> 00:02:31.520 align:middle
super は常に
現在のレシーバーを指しますが

00:02:31.680 --> 00:02:34.880 align:middle
super にメッセージを送ると

00:02:35.040 --> 00:02:38.720 align:middle
メソッド探索で

00:02:38.880 --> 00:02:40.960 align:middle
（メソッド探索については
　また別のクラスで説明します）

00:02:41.120 --> 00:02:45.840 align:middle
super と書かれた場所のスーパークラスから
メソッド探索を開始します。

00:02:46.800 --> 00:02:51.000 align:middle
thisContext はプログラムの
コールスタックを具体化したオブジェクト

00:02:51.160 --> 00:02:53.400 align:middle
を指します。

00:02:53.560 --> 00:02:57.280 align:middle
これは高度な概念で
このMOOCの最後で学びます。

00:02:57.440 --> 00:03:00.080 align:middle
あとで説明します。

00:03:00.240 --> 00:03:03.360 align:middle
とりあえずは、thisContextは
擬似変数だということが判れば結構です。

00:03:04.760 --> 00:03:08.120 align:middle
では、共有、あるいは
グローバルな変数に進みます。

00:03:08.280 --> 00:03:10.680 align:middle
まず第一に、全てのクラスがあてはまります。

00:03:10.840 --> 00:03:14.120 align:middle
あらゆるクラスの名前は大文字で始まります。

00:03:14.280 --> 00:03:17.680 align:middle
システム中のあらゆる場所から
参照できるからです。

00:03:18.480 --> 00:03:22.160 align:middle
注意してください。大文字で始まる名前が
すべてクラスというわけではありません。

00:03:22.320 --> 00:03:24.600 align:middle
例えば Transcript です。

00:03:24.760 --> 00:03:29.640 align:middle
システム中で共有されている
あるオブジェクトの名前です。

00:03:29.800 --> 00:03:32.840 align:middle
誰でもこのオブジェクトを参照できます。

00:03:33.000 --> 00:03:36.640 align:middle
Transcript は標準出力です。
他の言語ではよく stdout と呼ばれます。

00:03:36.800 --> 00:03:40.120 align:middle
とあるクラスのインスタンスオブジェクトで
グローバルにアクセス可能です。

00:03:40.280 --> 00:03:42.880 align:middle
なので名前が大文字で始まっています。

00:03:45.440 --> 00:03:48.280 align:middle
また、クラス変数もあります。

00:03:48.440 --> 00:03:52.840 align:middle
クラス変数は、クラス定義の
ここ classVariableNames で宣言されています。

00:03:53.000 --> 00:03:56.520 align:middle
この CombinedChar クラスでは
2つのクラス変数を定義しています。

00:03:56.680 --> 00:03:59.920 align:middle
1つは Compositions
もう1つは Decompositions です。

00:04:00.080 --> 00:04:02.200 align:middle
これら2つのクラス変数は

00:04:02.360 --> 00:04:06.040 align:middle
CombinedChar クラスとそのサブクラスの

00:04:06.200 --> 00:04:09.000 align:middle
インスタンスからアクセス可能です。

00:04:09.160 --> 00:04:11.880 align:middle
それが共有変数と呼ばれる理由です。

00:04:12.040 --> 00:04:15.480 align:middle
そのクラスとサブクラスの全てのインスタンスが
それらの変数を共有します。

00:04:15.640 --> 00:04:19.240 align:middle
なのでどちらの変数も大文字で始まります。

00:04:19.400 --> 00:04:22.080 align:middle
まとめると、覚えておくべきことは

00:04:22.240 --> 00:04:27.520 align:middle
全てのローカル変数は
オブジェクトやブロックやメソッドにローカルです。

00:04:27.680 --> 00:04:29.760 align:middle
そして小文字で始まります。

00:04:29.920 --> 00:04:33.600 align:middle
グローバル変数は
クラス名などで

00:04:33.760 --> 00:04:35.600 align:middle
大文字で始まります。

