﻿1
00:00:07,040 --> 00:00:10,440
こんにちは。今週は
核心に入っていきます。

2
00:00:10,600 --> 00:00:12,160
構文です。

3
00:00:12,320 --> 00:00:17,560
このクラスは Pharo の構文での
メッセージを主に扱います。

4
00:00:17,720 --> 00:00:19,560
それが Pharo の大部分なのです。

5
00:00:20,400 --> 00:00:23,840
Pharo には主なものが3つあります。

6
00:00:24,000 --> 00:00:28,040
オブジェクトとメッセージと
ブロックと呼ばれるクロージャです。

7
00:00:28,200 --> 00:00:30,200
ブロックについてのコースは
別にあるでしょう。

8
00:00:30,360 --> 00:00:33,640
これで Pharo の全構文の
ほとんどがカバーできます。

9
00:00:33,800 --> 00:00:37,360
Pharo の構文は
Smalltalk から来ていますが

10
00:00:37,520 --> 00:00:40,760
それは子ども達にプログラムの仕方を
教えるために設計されました。

11
00:00:40,920 --> 00:00:44,400
子ども達が書くような短い文のように

12
00:00:44,560 --> 00:00:46,040
プログラムを書きます。

13
00:00:46,200 --> 00:00:49,320
括弧の数をできるだけ少なく
済ますことにもなります。

14
00:00:49,480 --> 00:00:50,960
どのようなものかお見せしましょう。

15
00:00:52,040 --> 00:00:56,320
例えば
openstreetmapのタイルを取り出して

16
00:00:56,480 --> 00:00:59,520
それをグラフィカルに
ウィンドウで開きたいと思います。

17
00:00:59,680 --> 00:01:02,400
これは構文の例です。

18
00:01:02,560 --> 00:01:06,000
まず最初に PNG ファイルが欲しいので
括弧を使います。

19
00:01:06,160 --> 00:01:09,520
PNG ファイルを Pharo の
グラフィックオブジェクトに変換します。

20
00:01:09,680 --> 00:01:14,920
そしてウィンドウの中に開きます。
Pharo で実行して結果をみましょう。

21
00:01:15,080 --> 00:01:18,200
それはたぶん水でしょう。
水のタイルは沢山ありますから。

22
00:01:19,120 --> 00:01:23,040
Pharo の構文では
3種類のメッセージがあることで

23
00:01:23,200 --> 00:01:26,240
括弧の数を最小限にしています。

24
00:01:26,400 --> 00:01:30,480
単項(unary)、二項(binary)
そしてキーワードメッセージです。

25
00:01:30,640 --> 00:01:31,880
では見てみましょう。

26
00:01:32,520 --> 00:01:37,040
単項メッセージでは
1つのレシーバーに続いてメソッド名がきます。

27
00:01:37,200 --> 00:01:41,600
二項メッセージでは
1つのレシーバー、セレクター、そして引数です。

28
00:01:41,760 --> 00:01:46,880
キーワードメッセージでは
1つのレシーバー、1つまたは複数の引数がきます。

29
00:01:47,040 --> 00:01:51,000
:(コロン)があるので区別することができます。

30
00:01:51,160 --> 00:01:52,560
これを勉強しましょう。

31
00:01:53,560 --> 00:01:57,960
これら3種類のメッセージを
どのように使うのでしょうか？

32
00:01:58,120 --> 00:01:59,840
それらを使い分けることができます。

33
00:02:00,000 --> 00:02:02,480
プログラムが実行される方法が変わります。

34
00:02:02,640 --> 00:02:06,800
まずは括弧でくくられたものが
常に先に実行されます。

35
00:02:06,960 --> 00:02:09,880
続いて単項メッセージ、二項メッセージ
そしてキーワードメッセージの順です。

36
00:02:10,040 --> 00:02:13,760
同じレベルのメッセージは

37
00:02:13,920 --> 00:02:15,480
左から右の順に実行されます。

38
00:02:17,640 --> 00:02:20,800
では単項メッセージを見てみましょう。

39
00:02:20,960 --> 00:02:25,000
小さな整数1にクラスを尋ねたら
SmallInteger が返ってきます。

40
00:02:25,680 --> 00:02:29,040
これが翌週の宿題です。

41
00:02:29,200 --> 00:02:33,160
もし真偽値 false に not メッセージを送ったら
真偽値 true が得られます。

42
00:02:33,720 --> 00:02:36,520
Date クラスに今日の日付を問い合わせれば

43
00:02:36,680 --> 00:02:40,480
例えば「24 May 2009」のような
日付(Date)オブジェクトが返ってきます。

44
00:02:40,640 --> 00:02:43,320
Float クラスに pi メッセージを送れば

45
00:02:43,480 --> 00:02:46,240
円周率(pi)を表すオブジェクトが返ってきます。

46
00:02:47,640 --> 00:02:49,720
お気付きでしょうか

47
00:02:49,880 --> 00:02:54,040
オブジェクトにメッセージを送るのと

48
00:02:54,200 --> 00:02:57,520
全く同じ方法でクラスにも
メッセージを送ります。

49
00:02:57,680 --> 00:03:01,680
「これはクラスだから注意しなくては。
何々をしなければいけない」なんて言いません。

50
00:03:01,840 --> 00:03:06,560
私は整数に class メッセージを送り
整数はそのクラスを返してきます。

51
00:03:06,720 --> 00:03:10,880
私はDateクラスにtodayメッセージを送り
Dateクラスは日付を返します。

52
00:03:11,040 --> 00:03:12,240
当然のことです。

53
00:03:12,400 --> 00:03:14,760
Pharo では
クラスはオブジェクトでもあるのです。

54
00:03:14,920 --> 00:03:19,400
クラスに送られたメッセージは
インスタンスに送られたのと同じように処理されます。

55
00:03:19,560 --> 00:03:21,320
納得できることです。

56
00:03:22,600 --> 00:03:24,360
ここで1つ例題があります。

57
00:03:24,520 --> 00:03:28,000
この演習は構文とは関係ありません。
ちょっとした余興です。

58
00:03:28,720 --> 00:03:32,760
Pointクラスに実装された全てのメソッドが

59
00:03:34,040 --> 00:03:37,640
分かったら面白いと思いませんか？
単項メッセージでできます。

60
00:03:37,800 --> 00:03:42,280
「Pointクラスさん、あなたの全メソッドと
理解可能な全メッセージ名を返してください」

61
00:03:42,440 --> 00:03:45,240
すると全メッセージの長いリストが
返ってきます。

62
00:03:45,880 --> 00:03:48,560
ツールを作るのがどんなに簡単か
お分かりでしょうか？

63
00:03:48,720 --> 00:03:50,840
これをリストに入れれば

64
00:03:51,400 --> 00:03:54,920
クラスが答える全メッセージのリストが
できます。

65
00:03:55,080 --> 00:03:57,400
これが、あなたが使っているブラウザが
動いている仕組みです。

66
00:03:57,960 --> 00:04:02,160
ちょっと改良してみましょう。

67
00:04:02,320 --> 00:04:05,520
Pointクラスの全ての単項メッセージを
システムに問い合わせてみます。

68
00:04:05,680 --> 00:04:09,240
こんな風に書けます。「Point クラスさん
あなたの全セレクタをリストしてください。」

69
00:04:09,400 --> 00:04:12,560
配列が返ってきます。

70
00:04:12,720 --> 00:04:15,120
書いているのは
私はselect(選択する)したい

71
00:04:15,960 --> 00:04:18,080
これはキーワードメッセージですね。

72
00:04:18,240 --> 00:04:21,960
私はこれらのセレクタの中から
単項なものを選択(select)したい。

73
00:04:22,120 --> 00:04:24,560
#isUnary という問い合わせがあります。

74
00:04:24,720 --> 00:04:28,800
これはメソッド名に関するメッセージで
単項(unary)のものを選びます。

75
00:04:28,960 --> 00:04:33,280
これはちょっと補足ですが

76
00:04:33,440 --> 00:04:37,520
select:についてはイテレーターに関するコースで
学ぶことになります。

77
00:04:37,680 --> 00:04:40,920
とてもエレガントです。
システムへの問い合わせを1行で書けるのです。

78
00:04:41,800 --> 00:04:43,480
ではテーマに戻りましょう。

79
00:04:44,160 --> 00:04:48,120
二項メッセージです。
二項メッセージはオブジェクトと

80
00:04:48,280 --> 00:04:50,280
二項セレクタ、引数で構成されます。

81
00:04:50,440 --> 00:04:55,560
二項セレクタは記号の組み合わせです。

82
00:04:55,720 --> 00:04:57,240
「%」や「|」など

83
00:04:58,120 --> 00:05:02,960
記号的なものは二項です。
算数のようなものは二項です。

84
00:05:03,880 --> 00:05:06,800
例えば、オブジェクト「1」に
「+」メッセージを


85
00:05:06,960 --> 00:05:10,520
オブジェクト「2」を引数にすると
3が返ってきます。良いですね。

86
00:05:10,680 --> 00:05:14,080
「>」は二項メッセージです。

87
00:05:14,240 --> 00:05:17,880
「@」も二項メッセージです。
(点オブジェクトを生成します).

88
00:05:18,040 --> 00:05:21,200
文字列の連結する「,」は
二項メッセージです。

89
00:05:21,360 --> 00:05:23,760
「'Black chocolate',' is good'」
と書くと

90
00:05:23,920 --> 00:05:27,360
「'Black chocolate is good'」
という文字列が返ってきます。その通りですね。

91
00:05:27,520 --> 00:05:30,480
キーワードメッセージについてですが…

92
00:05:30,640 --> 00:05:33,520
ピリオドや括弧やコンマを使った

93
00:05:34,120 --> 00:05:37,800
JavaやCのような構文に慣れている皆さんには

94
00:05:37,960 --> 00:05:42,240
フラストレーションになるようですが

95
00:05:42,400 --> 00:05:44,520
こんな風に:を間に挟みます。

96
00:05:46,640 --> 00:05:50,040
この例で見ていただきたいのは

97
00:05:50,200 --> 00:05:55,360
メッセージはkayword1keyword2だということです。

98
00:05:58,440 --> 00:06:02,760
これで完結したメッセージです。
2つの部分から構成されています。

99
00:06:05,840 --> 00:06:09,440
ではテストの時間です。
数秒ずつで答えてください。

100
00:06:09,600 --> 00:06:15,480
これらのメッセージは何でしょうか？
それぞれ何という種類のメッセージでしょうか？

101
00:06:15,640 --> 00:06:18,320
1つ目のものは引数がありません。
これは単項メッセージです。

102
00:06:18,480 --> 00:06:20,360
2つ目も同じです。

103
00:06:20,520 --> 00:06:22,960
コロンがあります。
キーワードメッセージです。

104
00:06:23,120 --> 00:06:26,840
よくわからないコンマがあって何かしています。
二項です。

105
00:06:27,000 --> 00:06:31,080
変ですね。二項です。
引数がありません。単項です。

106
00:06:31,240 --> 00:06:33,720
コロンがあります。キーワードです。

107
00:06:33,880 --> 00:06:36,160
難しいように見えるかもしれませんが

108
00:06:36,320 --> 00:06:38,200
これが解答です。

109
00:06:38,800 --> 00:06:40,080
例えば

110
00:06:40,240 --> 00:06:43,600
点のx値を変えたいとします。

111
00:06:43,760 --> 00:06:47,320
これは点です。二項メッセージです。

112
00:06:48,000 --> 00:06:50,400
setX: と引数を書きます。

113
00:06:50,560 --> 00:06:53,360
これでx値が2に変わった点が返ってきます。

114
00:06:53,920 --> 00:06:55,880
それほど難しくないですよね？

115
00:06:56,960 --> 00:07:00,800
次に at:put: メッセージです。
配列があります。

116
00:07:04,040 --> 00:07:08,200
配列には文字列が格納されています。
'Calvin' 'hates' 'Suzie'です。

117
00:07:08,840 --> 00:07:12,120
2つ目の要素を変更します。

118
00:07:12,280 --> 00:07:15,960
「at: 2 put: 'loves'」と書きます。

119
00:07:16,120 --> 00:07:18,760
これが2番目の要素です。
なので、'loves'がここに来ます。

120
00:07:18,920 --> 00:07:21,120
配列について
このメソッドは

121
00:07:21,280 --> 00:07:24,600
at:put: と呼ばれています。

122
00:07:24,760 --> 00:07:28,240
このメソッドは集合の
与えられた添字の値を変更します。

123
00:07:28,400 --> 00:07:33,160
お分かりのように
Pharoでは添字は1から始まります。0ではなく。

124
00:07:33,320 --> 00:07:35,920
2番目の要素が欲しいので
1、2と数えるのです。

125
00:07:36,080 --> 00:07:38,360
引き算したりする必要はありません。

126
00:07:40,520 --> 00:07:46,080
キーワードメッセージの例が
もう1つあります。

127
00:07:46,240 --> 00:07:49,640
12が
(12は整数です)

128
00:07:49,800 --> 00:07:51,920
10と20の間かどうか訊きます。

129
00:07:52,960 --> 00:07:57,680
between:and: メッセージです。

130
00:07:58,840 --> 00:08:03,520
構文的には

131
00:08:05,280 --> 00:08:08,520
12.betweenAnd(10,20).
と同じです。

132
00:08:10,400 --> 00:08:13,680
これについては
もう良いでしょう。

133
00:08:14,560 --> 00:08:16,560
メッセージには3種類あります。

134
00:08:16,720 --> 00:08:19,920
単項、二項、そしてキーワードです。

135
00:08:20,960 --> 00:08:22,000
以上です。
