WEBVTT

00:00:07.040 --> 00:00:10.440 align:middle
こんにちは。今週は
核心に入っていきます。

00:00:10.600 --> 00:00:12.160 align:middle
構文です。

00:00:12.320 --> 00:00:17.560 align:middle
このクラスは Pharo の構文での
メッセージを主に扱います。

00:00:17.720 --> 00:00:19.560 align:middle
それが Pharo の大部分なのです。

00:00:20.400 --> 00:00:23.840 align:middle
Pharo には主なものが3つあります。

00:00:24.000 --> 00:00:28.040 align:middle
オブジェクトとメッセージと
ブロックと呼ばれるクロージャです。

00:00:28.200 --> 00:00:30.200 align:middle
ブロックについてのコースは
別にあるでしょう。

00:00:30.360 --> 00:00:33.640 align:middle
これで Pharo の全構文の
ほとんどがカバーできます。

00:00:33.800 --> 00:00:37.360 align:middle
Pharo の構文は
Smalltalk から来ていますが

00:00:37.520 --> 00:00:40.760 align:middle
それは子ども達にプログラムの仕方を
教えるために設計されました。

00:00:40.920 --> 00:00:44.400 align:middle
子ども達が書くような短い文のように

00:00:44.560 --> 00:00:46.040 align:middle
プログラムを書きます。

00:00:46.200 --> 00:00:49.320 align:middle
括弧の数をできるだけ少なく
済ますことにもなります。

00:00:49.480 --> 00:00:50.960 align:middle
どのようなものかお見せしましょう。

00:00:52.040 --> 00:00:56.320 align:middle
例えば
openstreetmapのタイルを取り出して

00:00:56.480 --> 00:00:59.520 align:middle
それをグラフィカルに
ウィンドウで開きたいと思います。

00:00:59.680 --> 00:01:02.400 align:middle
これは構文の例です。

00:01:02.560 --> 00:01:06.000 align:middle
まず最初に PNG ファイルが欲しいので
括弧を使います。

00:01:06.160 --> 00:01:09.520 align:middle
PNG ファイルを Pharo の
グラフィックオブジェクトに変換します。

00:01:09.680 --> 00:01:14.920 align:middle
そしてウィンドウの中に開きます。
Pharo で実行して結果をみましょう。

00:01:15.080 --> 00:01:18.200 align:middle
それはたぶん水でしょう。
水のタイルは沢山ありますから。

00:01:19.120 --> 00:01:23.040 align:middle
Pharo の構文では
3種類のメッセージがあることで

00:01:23.200 --> 00:01:26.240 align:middle
括弧の数を最小限にしています。

00:01:26.400 --> 00:01:30.480 align:middle
単項(unary)、二項(binary)
そしてキーワードメッセージです。

00:01:30.640 --> 00:01:31.880 align:middle
では見てみましょう。

00:01:32.520 --> 00:01:37.040 align:middle
単項メッセージでは
1つのレシーバーに続いてメソッド名がきます。

00:01:37.200 --> 00:01:41.600 align:middle
二項メッセージでは
1つのレシーバー、セレクター、そして引数です。

00:01:41.760 --> 00:01:46.880 align:middle
キーワードメッセージでは
1つのレシーバー、1つまたは複数の引数がきます。

00:01:47.040 --> 00:01:51.000 align:middle
:(コロン)があるので区別することができます。

00:01:51.160 --> 00:01:52.560 align:middle
これを勉強しましょう。

00:01:53.560 --> 00:01:57.960 align:middle
これら3種類のメッセージを
どのように使うのでしょうか？

00:01:58.120 --> 00:01:59.840 align:middle
それらを使い分けることができます。

00:02:00.000 --> 00:02:02.480 align:middle
プログラムが実行される方法が変わります。

00:02:02.640 --> 00:02:06.800 align:middle
まずは括弧でくくられたものが
常に先に実行されます。

00:02:06.960 --> 00:02:09.880 align:middle
続いて単項メッセージ、二項メッセージ
そしてキーワードメッセージの順です。

00:02:10.040 --> 00:02:13.760 align:middle
同じレベルのメッセージは

00:02:13.920 --> 00:02:15.480 align:middle
左から右の順に実行されます。

00:02:17.640 --> 00:02:20.800 align:middle
では単項メッセージを見てみましょう。

00:02:20.960 --> 00:02:25.000 align:middle
小さな整数1にクラスを尋ねたら
SmallInteger が返ってきます。

00:02:25.680 --> 00:02:29.040 align:middle
これが翌週の宿題です。

00:02:29.200 --> 00:02:33.160 align:middle
もし真偽値 false に not メッセージを送ったら
真偽値 true が得られます。

00:02:33.720 --> 00:02:36.520 align:middle
Date クラスに今日の日付を問い合わせれば

00:02:36.680 --> 00:02:40.480 align:middle
例えば「24 May 2009」のような
日付(Date)オブジェクトが返ってきます。

00:02:40.640 --> 00:02:43.320 align:middle
Float クラスに pi メッセージを送れば

00:02:43.480 --> 00:02:46.240 align:middle
円周率(pi)を表すオブジェクトが返ってきます。

00:02:47.640 --> 00:02:49.720 align:middle
お気付きでしょうか

00:02:49.880 --> 00:02:54.040 align:middle
オブジェクトにメッセージを送るのと

00:02:54.200 --> 00:02:57.520 align:middle
全く同じ方法でクラスにも
メッセージを送ります。

00:02:57.680 --> 00:03:01.680 align:middle
「これはクラスだから注意しなくては。
何々をしなければいけない」なんて言いません。

00:03:01.840 --> 00:03:06.560 align:middle
私は整数に class メッセージを送り
整数はそのクラスを返してきます。

00:03:06.720 --> 00:03:10.880 align:middle
私はDateクラスにtodayメッセージを送り
Dateクラスは日付を返します。

00:03:11.040 --> 00:03:12.240 align:middle
当然のことです。

00:03:12.400 --> 00:03:14.760 align:middle
Pharo では
クラスはオブジェクトでもあるのです。

00:03:14.920 --> 00:03:19.400 align:middle
クラスに送られたメッセージは
インスタンスに送られたのと同じように処理されます。

00:03:19.560 --> 00:03:21.320 align:middle
納得できることです。

00:03:22.600 --> 00:03:24.360 align:middle
ここで1つ例題があります。

00:03:24.520 --> 00:03:28.000 align:middle
この演習は構文とは関係ありません。
ちょっとした余興です。

00:03:28.720 --> 00:03:32.760 align:middle
Pointクラスに実装された全てのメソッドが

00:03:34.040 --> 00:03:37.640 align:middle
分かったら面白いと思いませんか？
単項メッセージでできます。

00:03:37.800 --> 00:03:42.280 align:middle
「Pointクラスさん、あなたの全メソッドと
理解可能な全メッセージ名を返してください」

00:03:42.440 --> 00:03:45.240 align:middle
すると全メッセージの長いリストが
返ってきます。

00:03:45.880 --> 00:03:48.560 align:middle
ツールを作るのがどんなに簡単か
お分かりでしょうか？

00:03:48.720 --> 00:03:50.840 align:middle
これをリストに入れれば

00:03:51.400 --> 00:03:54.920 align:middle
クラスが答える全メッセージのリストが
できます。

00:03:55.080 --> 00:03:57.400 align:middle
これが、あなたが使っているブラウザが
動いている仕組みです。

00:03:57.960 --> 00:04:02.160 align:middle
ちょっと改良してみましょう。

00:04:02.320 --> 00:04:05.520 align:middle
Pointクラスの全ての単項メッセージを
システムに問い合わせてみます。

00:04:05.680 --> 00:04:09.240 align:middle
こんな風に書けます。「Point クラスさん
あなたの全セレクタをリストしてください。」

00:04:09.400 --> 00:04:12.560 align:middle
配列が返ってきます。

00:04:12.720 --> 00:04:15.120 align:middle
書いているのは
私はselect(選択する)したい

00:04:15.960 --> 00:04:18.080 align:middle
これはキーワードメッセージですね。

00:04:18.240 --> 00:04:21.960 align:middle
私はこれらのセレクタの中から
単項なものを選択(select)したい。

00:04:22.120 --> 00:04:24.560 align:middle
#isUnary という問い合わせがあります。

00:04:24.720 --> 00:04:28.800 align:middle
これはメソッド名に関するメッセージで
単項(unary)のものを選びます。

00:04:28.960 --> 00:04:33.280 align:middle
これはちょっと補足ですが

00:04:33.440 --> 00:04:37.520 align:middle
select:についてはイテレーターに関するコースで
学ぶことになります。

00:04:37.680 --> 00:04:40.920 align:middle
とてもエレガントです。
システムへの問い合わせを1行で書けるのです。

00:04:41.800 --> 00:04:43.480 align:middle
ではテーマに戻りましょう。

00:04:44.160 --> 00:04:48.120 align:middle
二項メッセージです。
二項メッセージはオブジェクトと

00:04:48.280 --> 00:04:50.280 align:middle
二項セレクタ、引数で構成されます。

00:04:50.440 --> 00:04:55.560 align:middle
二項セレクタは記号の組み合わせです。

00:04:55.720 --> 00:04:57.240 align:middle
「%」や「|」など

00:04:58.120 --> 00:05:02.960 align:middle
記号的なものは二項です。
算数のようなものは二項です。

00:05:03.880 --> 00:05:06.800 align:middle
例えば、オブジェクト「1」に
「+」メッセージを

85 align:middle
00:05:06,960 --> 00:05:10,520
オブジェクト「2」を引数にすると
3が返ってきます。良いですね。

00:05:10.680 --> 00:05:14.080 align:middle
「>」は二項メッセージです。

00:05:14.240 --> 00:05:17.880 align:middle
「@」も二項メッセージです。
(点オブジェクトを生成します).

00:05:18.040 --> 00:05:21.200 align:middle
文字列の連結する「,」は
二項メッセージです。

00:05:21.360 --> 00:05:23.760 align:middle
「'Black chocolate',' is good'」
と書くと

00:05:23.920 --> 00:05:27.360 align:middle
「'Black chocolate is good'」
という文字列が返ってきます。その通りですね。

00:05:27.520 --> 00:05:30.480 align:middle
キーワードメッセージについてですが…

00:05:30.640 --> 00:05:33.520 align:middle
ピリオドや括弧やコンマを使った

00:05:34.120 --> 00:05:37.800 align:middle
JavaやCのような構文に慣れている皆さんには

00:05:37.960 --> 00:05:42.240 align:middle
フラストレーションになるようですが

00:05:42.400 --> 00:05:44.520 align:middle
こんな風に:を間に挟みます。

00:05:46.640 --> 00:05:50.040 align:middle
この例で見ていただきたいのは

00:05:50.200 --> 00:05:55.360 align:middle
メッセージはkayword1keyword2だということです。

00:05:58.440 --> 00:06:02.760 align:middle
これで完結したメッセージです。
2つの部分から構成されています。

00:06:05.840 --> 00:06:09.440 align:middle
ではテストの時間です。
数秒ずつで答えてください。

00:06:09.600 --> 00:06:15.480 align:middle
これらのメッセージは何でしょうか？
それぞれ何という種類のメッセージでしょうか？

00:06:15.640 --> 00:06:18.320 align:middle
1つ目のものは引数がありません。
これは単項メッセージです。

00:06:18.480 --> 00:06:20.360 align:middle
2つ目も同じです。

00:06:20.520 --> 00:06:22.960 align:middle
コロンがあります。
キーワードメッセージです。

00:06:23.120 --> 00:06:26.840 align:middle
よくわからないコンマがあって何かしています。
二項です。

00:06:27.000 --> 00:06:31.080 align:middle
変ですね。二項です。
引数がありません。単項です。

00:06:31.240 --> 00:06:33.720 align:middle
コロンがあります。キーワードです。

00:06:33.880 --> 00:06:36.160 align:middle
難しいように見えるかもしれませんが

00:06:36.320 --> 00:06:38.200 align:middle
これが解答です。

00:06:38.800 --> 00:06:40.080 align:middle
例えば

00:06:40.240 --> 00:06:43.600 align:middle
点のx値を変えたいとします。

00:06:43.760 --> 00:06:47.320 align:middle
これは点です。二項メッセージです。

00:06:48.000 --> 00:06:50.400 align:middle
setX: と引数を書きます。

00:06:50.560 --> 00:06:53.360 align:middle
これでx値が2に変わった点が返ってきます。

00:06:53.920 --> 00:06:55.880 align:middle
それほど難しくないですよね？

00:06:56.960 --> 00:07:00.800 align:middle
次に at:put: メッセージです。
配列があります。

00:07:04.040 --> 00:07:08.200 align:middle
配列には文字列が格納されています。
'Calvin' 'hates' 'Suzie'です。

00:07:08.840 --> 00:07:12.120 align:middle
2つ目の要素を変更します。

00:07:12.280 --> 00:07:15.960 align:middle
「at: 2 put: 'loves'」と書きます。

00:07:16.120 --> 00:07:18.760 align:middle
これが2番目の要素です。
なので、'loves'がここに来ます。

00:07:18.920 --> 00:07:21.120 align:middle
配列について
このメソッドは

00:07:21.280 --> 00:07:24.600 align:middle
at:put: と呼ばれています。

00:07:24.760 --> 00:07:28.240 align:middle
このメソッドは集合の
与えられた添字の値を変更します。

00:07:28.400 --> 00:07:33.160 align:middle
お分かりのように
Pharoでは添字は1から始まります。0ではなく。

00:07:33.320 --> 00:07:35.920 align:middle
2番目の要素が欲しいので
1、2と数えるのです。

00:07:36.080 --> 00:07:38.360 align:middle
引き算したりする必要はありません。

00:07:40.520 --> 00:07:46.080 align:middle
キーワードメッセージの例が
もう1つあります。

00:07:46.240 --> 00:07:49.640 align:middle
12が
(12は整数です)

00:07:49.800 --> 00:07:51.920 align:middle
10と20の間かどうか訊きます。

00:07:52.960 --> 00:07:57.680 align:middle
between:and: メッセージです。

00:07:58.840 --> 00:08:03.520 align:middle
構文的には

00:08:05.280 --> 00:08:08.520 align:middle
12.betweenAnd(10,20).
と同じです。

00:08:10.400 --> 00:08:13.680 align:middle
これについては
もう良いでしょう。

00:08:14.560 --> 00:08:16.560 align:middle
メッセージには3種類あります。

00:08:16.720 --> 00:08:19.920 align:middle
単項、二項、そしてキーワードです。

00:08:20.960 --> 00:08:22.000 align:middle
以上です。

