﻿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
大文字で始まります。