WEBVTT

00:00:00.040 --> 00:00:02.880 align:middle
今回は構文の概略をします。

00:00:03.040 --> 00:00:06.240 align:middle
構文全体をお見せしますが

00:00:06.400 --> 00:00:09.440 align:middle
完全に理解できなくても
深刻にならないでください。

00:00:09.600 --> 00:00:11.400 align:middle
後でまた繰り返しますので。

00:00:11.560 --> 00:00:15.360 align:middle
まずは Pharo にある構文全てをお見せします。

00:00:16.040 --> 00:00:20.000 align:middle
まずは主要な構文要素を見ていきましょう。

00:00:20.160 --> 00:00:22.760 align:middle
3 種類のメッセージを見て

00:00:22.920 --> 00:00:25.280 align:middle
そしてブロック構文を見ます。

00:00:25.440 --> 00:00:27.440 align:middle
Pharo の本質的な部分です。

00:00:27.600 --> 00:00:32.000 align:middle
全てを理解できなくても心配しないでください。
全てまたやりますので。

00:00:33.120 --> 00:00:37.320 align:middle
思い出してください。
全ての構文がこのスライドに載っています。

00:00:37.480 --> 00:00:40.040 align:middle
これからちょっとだけ詳細に踏み込みます。

00:00:40.200 --> 00:00:43.960 align:middle
これは exampleWithNumber のメソッド定義です。

00:00:44.120 --> 00:00:46.120 align:middle
引数があります。

00:00:46.360 --> 00:00:51.040 align:middle
縦棒がついたローカル変数定義があります。

00:00:51.200 --> 00:00:54.040 align:middle
値を返す、リターンがあります。

00:00:54.200 --> 00:00:57.400 align:middle
ループがあり、代入があります。

00:00:57.560 --> 00:01:01.640 align:middle
ピリオドは、命令のセパレーターです。

00:01:03.120 --> 00:01:05.600 align:middle
これらを全て見ていきます。

00:01:07.040 --> 00:01:10.080 align:middle
伝統的といえる Hello World から始めます。

00:01:10.240 --> 00:01:12.000 align:middle
ここで、もし良かったら

00:01:12.160 --> 00:01:16.400 align:middle
全ての命令は Pharo 上で実行して

00:01:16.560 --> 00:01:18.360 align:middle
結果を見ることができます。

00:01:18.520 --> 00:01:21.440 align:middle
ここに文字列がありますが

00:01:21.840 --> 00:01:25.880 align:middle
グラフィック要素である Morph に変換して

00:01:26.040 --> 00:01:29.640 align:middle
ウィンドウで開くように
お願いすることができます。

00:01:29.840 --> 00:01:33.320 align:middle
つまり、文字列オブジェクトに
asMorph を送り

00:01:33.480 --> 00:01:36.080 align:middle
openInWindow を

00:01:36.240 --> 00:01:37.920 align:middle
得られた Morph に送ります。

00:01:38.080 --> 00:01:41.480 align:middle
つまり、2 つのメッセージ送信と
1 つの文字列オブジェクトがあります。

00:01:42.520 --> 00:01:43.960 align:middle
より複雑な例もあります。

00:01:44.120 --> 00:01:47.920 align:middle
ウェブから Pharo のロゴを
取得したいとします。

00:01:48.280 --> 00:01:50.800 align:middle
その方法はこうです。

00:01:50.960 --> 00:01:56.840 align:middle
ZnEasy getPng: を
URL 文字列 を付けて実行します。

00:01:57.000 --> 00:02:00.000 align:middle
読み込みたいリソースの URL です。

00:02:00.160 --> 00:02:04.440 align:middle
そして、またグラフィックオブジェクトに変換し

00:02:04.600 --> 00:02:06.760 align:middle
ウィンドウで開くようにお願いします。

00:02:06.920 --> 00:02:09.200 align:middle
ZnEasy はクラスです。

00:02:09.360 --> 00:02:12.480 align:middle
クラスは大文字で始まります。

00:02:12.640 --> 00:02:17.800 align:middle
getPng: メッセージのコロン（:）は
引数がくるという意味です。

00:02:17.960 --> 00:02:22.120 align:middle
引数は文字列 http://pharo.org です。

00:02:22.280 --> 00:02:27.120 align:middle
この文字列は getPng: メッセージの引数です。

00:02:28.280 --> 00:02:32.520 align:middle
asMorph メッセージと
openInWindow メッセージは

00:02:32.680 --> 00:02:35.400 align:middle
左から右へと読みます。

00:02:35.800 --> 00:02:38.640 align:middle
ここで、このコードを Pharo 上に

00:02:38.800 --> 00:02:41.000 align:middle
コピー＆ペーストするかキーボード入力すれば

00:02:41.160 --> 00:02:43.760 align:middle
Pharo のロゴが得られます。

00:02:43.920 --> 00:02:47.200 align:middle
Pharo にはどんな構文要素があるのでしょう？

00:02:47.360 --> 00:02:50.680 align:middle
コメントがあります。
二重引用符で始まります。

00:02:50.840 --> 00:02:52.200 align:middle
これがコメントです。

00:02:52.360 --> 00:02:55.840 align:middle
文字は頭にドルマークが付きます。

00:02:56.000 --> 00:02:58.080 align:middle
$A は文字 A です。

00:02:58.240 --> 00:03:02.280 align:middle
文字列は引用符で始まり
引用符で終わります。

00:03:03.400 --> 00:03:05.920 align:middle
シンボルがあります。
ユニークな文字列です。

00:03:06.080 --> 00:03:10.320 align:middle
シンボルはこんな風に
ハッシュタグが付いています。

00:03:10.480 --> 00:03:12.840 align:middle
#a はシンボル a です。

00:03:13.000 --> 00:03:14.600 align:middle
リテラル配列があります。

00:03:14.760 --> 00:03:19.200 align:middle
これは 12、23、36 の 3 要素からなる
リテラル配列です。

00:03:19.560 --> 00:03:22.280 align:middle
整数には様々な表現がありますが

00:03:22.440 --> 00:03:24.600 align:middle
それについては掘り下げません。

00:03:24.760 --> 00:03:27.360 align:middle
通常は 10 進法表現を使います。

00:03:27.520 --> 00:03:30.240 align:middle
しかし必要ならば 2 進法も使えます。

00:03:30.400 --> 00:03:32.760 align:middle
実数もあります。
同じように色々な表現があります。

00:03:32.920 --> 00:03:35.200 align:middle
必要ならば構文を見つけることができます。

00:03:35.360 --> 00:03:38.080 align:middle
true と false の真偽値があります。

00:03:38.240 --> 00:03:39.800 align:middle
未定義値もあります。

00:03:39.960 --> 00:03:43.640 align:middle
Java での null は
Pharo では nil です。

00:03:43.800 --> 00:03:47.200 align:middle
nil は UndefinedObject クラスの
インスタンスです。

00:03:47.480 --> 00:03:49.320 align:middle
点もあります。

00:03:49.480 --> 00:03:52.720 align:middle
Pharo での点は

00:03:52.880 --> 00:03:56.440 align:middle
例えば 10 @ 200 と表現します。

00:03:56.600 --> 00:03:59.880 align:middle
x が 10、y が 200 の

00:04:00.040 --> 00:04:02.440 align:middle
点を生成します。

00:04:03.680 --> 00:04:07.040 align:middle
構文の本質的な要素を見てきました。

00:04:07.200 --> 00:04:09.840 align:middle
言語の構成を見ていきます。

00:04:10.000 --> 00:04:13.040 align:middle
一時変数宣言があります。

00:04:13.200 --> 00:04:16.200 align:middle
一時変数宣言は縦棒のペアです。

00:04:16.360 --> 00:04:19.320 align:middle
代入はコロンと等号です。

00:04:19.480 --> 00:04:22.520 align:middle
変数 var に aValue を代入します。

00:04:22.720 --> 00:04:24.640 align:middle
メッセージがあります。

00:04:24.800 --> 00:04:26.280 align:middle
一連のメッセージを

00:04:26.440 --> 00:04:28.240 align:middle
区切るのは

00:04:28.400 --> 00:04:30.760 align:middle
ピリオドです。

00:04:30.920 --> 00:04:32.000 align:middle
リターンがあります。

00:04:32.160 --> 00:04:34.560 align:middle
関数やメソッドが値を返します。
gives a value.

00:04:34.720 --> 00:04:39.520 align:middle
英語でいうところのキャレットを使います。

00:04:39.680 --> 00:04:41.200 align:middle
そしてブロックがあります。

00:04:41.360 --> 00:04:45.760 align:middle
技術的に言えばレキシカルクロージャですが
are lexical closures,

00:04:46.480 --> 00:04:49.840 align:middle
匿名メソッドと見做してもかまいません。

00:04:50.000 --> 00:04:53.120 align:middle
ブロックについて簡単に説明します。

00:04:53.280 --> 00:04:55.880 align:middle
ブロックは角括弧で定義されます。

00:04:56.680 --> 00:04:59.560 align:middle
ブロックは value メッセージで実行されます。

00:04:59.720 --> 00:05:01.160 align:middle
あとで見てみましょう。

00:05:01.320 --> 00:05:03.960 align:middle
これで全ての構文構成です。

00:05:05.240 --> 00:05:08.520 align:middle
それでは
Pharo プログラムの本質は何でしょう？

00:05:08.680 --> 00:05:12.240 align:middle
それは、メッセージを使って
オブジェクトを作ることです。

00:05:12.400 --> 00:05:14.320 align:middle
これらのオブジェクトにメッセージを送って

00:05:14.480 --> 00:05:17.280 align:middle
あれやこれや、ブロックを使って。

00:05:17.440 --> 00:05:18.680 align:middle
それが全てです。

00:05:19.800 --> 00:05:23.080 align:middle
Pharo には 3 種類のメッセージがあります。
なぜでしょう？

00:05:23.240 --> 00:05:26.560 align:middle
必要な括弧の数を最小限にするためです。

00:05:26.720 --> 00:05:28.320 align:middle
メッセージは良い感じにシンプルです。

00:05:28.480 --> 00:05:32.360 align:middle
単項メッセージはレシーバーとセレクター
から成っています。

00:05:32.520 --> 00:05:35.480 align:middle
例えば、9 squared （9 の自乗）です。

00:05:35.640 --> 00:05:37.680 align:middle
今日の日付が必要であれば

00:05:37.840 --> 00:05:41.480 align:middle
Date クラスに today メッセージを送ります。

00:05:41.960 --> 00:05:43.800 align:middle
引数はありません。

00:05:43.960 --> 00:05:46.080 align:middle
次に、二項メッセージです。

00:05:46.240 --> 00:05:50.800 align:middle
二項メッセージは
レシーバー、セレクター、引数、という形式です。

00:05:51.160 --> 00:05:52.640 align:middle
ただし、セレクターは

00:05:52.800 --> 00:05:57.320 align:middle
+, -, ~, =,  等です。

00:05:57.480 --> 00:06:01.080 align:middle
これらの数学的な記号は全て二項メッセージです。

00:06:01.360 --> 00:06:04.560 align:middle
ここに 1 + 2 とありますが
これはメッセージです。

00:06:04.720 --> 00:06:08.080 align:middle
オブジェクト 1 に メッセージ + を
引数 2 を付けて送ります。

00:06:08.240 --> 00:06:11.240 align:middle
@ で点を生成するのもメッセージです。

00:06:11.400 --> 00:06:12.760 align:middle
二項メッセージです。

00:06:12.920 --> 00:06:16.160 align:middle
ここで、点 3 @ 4 を

00:06:16.320 --> 00:06:18.640 align:middle
メッセージ @ を送ることで
生成しています。

00:06:18.800 --> 00:06:22.200 align:middle
そして、我々が呼ぶところの
キーワードメッセージがあります。

00:06:22.360 --> 00:06:24.920 align:middle
キーワードメッセージは

00:06:25.080 --> 00:06:28.840 align:middle
レシーバー、キー1:、引数1、キー2:、引数2
という形式を取ります。

00:06:29.000 --> 00:06:31.440 align:middle
例えば…

00:06:31.600 --> 00:06:34.720 align:middle
2 between: 10 and: 20
です。

00:06:35.000 --> 00:06:38.760 align:middle
これを Java や C で書くとしたら

00:06:39.000 --> 00:06:44.320 align:middle
betweenAnd(10, 20)

00:06:44.480 --> 00:06:48.920 align:middle
のように書くでしょう。

00:06:49.080 --> 00:06:53.720 align:middle
Pharo ではこれを
キーとキーという形式で表現します。

00:06:53.880 --> 00:06:57.520 align:middle
後でまた見ますが、これが構文のポイントです。

00:06:58.800 --> 00:07:02.680 align:middle
メッセージ間に優先順位があります。

00:07:02.840 --> 00:07:06.480 align:middle
システムは次の優先順位で実行します。
括弧

00:07:06.640 --> 00:07:09.200 align:middle
単項メッセージ
二項メッセージ、そしてキーワードメッセージ。

00:07:09.360 --> 00:07:10.160 align:middle
こうなっているのは

00:07:10.320 --> 00:07:13.560 align:middle
煩雑な括弧を書かずに済ませるためです。

00:07:13.720 --> 00:07:17.880 align:middle
やろうと思えば、あらゆるところで
括弧だらけにしても良いのですが

00:07:18.040 --> 00:07:20.000 align:middle
コードはまともに読めなくなるでしょう。

00:07:20.960 --> 00:07:24.680 align:middle
それぞれの種類のメッセージについて
簡単におさらいします。

00:07:24.840 --> 00:07:27.680 align:middle
単項メッセージ。
10000 factorial

00:07:27.840 --> 00:07:30.160 align:middle
実行してみてください。
とても大きな数です。

00:07:30.320 --> 00:07:33.640 align:middle
オブジェクト 10000 に
メッセージ factorial を送ります。

00:07:33.800 --> 00:07:36.240 align:middle
引数はありません。
それが単項メッセージです。

00:07:36.880 --> 00:07:41.840 align:middle
同様に、二項メッセージがあります。
1+3 は二項メッセージです。

00:07:42.000 --> 00:07:46.720 align:middle
セレクター
つまりメソッドの名前は、+ です。

00:07:47.360 --> 00:07:52.040 align:middle
オブジェクト 1 に メッセージ + を
引数としてオブジェクト 3 を付けて送ります。

00:07:53.120 --> 00:07:55.960 align:middle
キーワードメッセージは
前に説明しましたが

00:07:56.120 --> 00:08:00.360 align:middle
また説明します。
教えるということは繰り返すということです。

00:08:00.800 --> 00:08:04.520 align:middle
キーワードメッセージは

00:08:04.680 --> 00:08:07.560 align:middle
引数付きのメッセージで

00:08:07.720 --> 00:08:11.080 align:middle
引数はメッセージの中に入り込んでいます。

00:08:11.240 --> 00:08:14.680 align:middle
元の発想としては
子供がつかうための構文で

00:08:14.840 --> 00:08:18.320 align:middle
ある意味、英語に近いものです。

00:08:18.480 --> 00:08:24.280 align:middle
引数をメッセージの内側に取り込みます。

00:08:25.440 --> 00:08:29.120 align:middle
例えば、HTTP リクエストを送るとします。

00:08:29.280 --> 00:08:32.880 align:middle
ZnClient は Pharo の HTTP クライアントです。

00:08:33.040 --> 00:08:35.880 align:middle
Zn クライアントのインスタンスを生成します。

00:08:36.040 --> 00:08:40.680 align:middle
new は単項メッセージで
引数はありません。コロンはありません。

00:08:41.560 --> 00:08:46.720 align:middle
url: はキーワードメッセージで
コロンが付いています。

00:08:46.880 --> 00:08:49.880 align:middle
queryAt:put:

00:08:50.040 --> 00:08:52.600 align:middle
もキーワードメッセージです。

00:08:52.760 --> 00:08:54.880 align:middle
get は単項メッセージです。

00:08:55.360 --> 00:08:59.400 align:middle
この例の中に、セミコロンがあります。

00:08:59.760 --> 00:09:02.120 align:middle
これはカスケードと呼ばれるもので

00:09:02.880 --> 00:09:05.800 align:middle
全てのメッセージを
同じオブジェクトに送ります。

00:09:05.960 --> 00:09:08.920 align:middle
一時変数が必要ありません。

00:09:09.080 --> 00:09:12.320 align:middle
そしてよりコンパクトなコードをかけます。

00:09:13.720 --> 00:09:17.080 align:middle
メッセージはあらゆる所にある
ということを理解してください。

00:09:17.240 --> 00:09:20.880 align:middle
条件分岐、ループ、列挙、並行処理は
メッセージとして表現されます。

00:09:21.040 --> 00:09:23.480 align:middle
これらの 3 つのメッセージについての説明は

00:09:23.640 --> 00:09:25.560 align:middle
あらゆる所で適用されます。

00:09:25.720 --> 00:09:27.760 align:middle
それはシステムの要石なのです。

00:09:27.920 --> 00:09:31.000 align:middle
これらのメッセージ以外には
何もありません。

00:09:31.520 --> 00:09:32.880 align:middle
見てみましょう。

00:09:33.040 --> 00:09:35.520 align:middle
ここに階乗の定義があります。

00:09:35.680 --> 00:09:37.200 align:middle
これをどう定義したらよいでしょう？

00:09:37.360 --> 00:09:40.160 align:middle
factorial メソッドを定義します。

00:09:40.320 --> 00:09:43.840 align:middle
このメソッドにコメントを書きます。
二重引用符を使います。

00:09:44.000 --> 00:09:45.360 align:middle
そして、self で始めます。

00:09:45.520 --> 00:09:47.560 align:middle
もしメッセージを受け取った
このオブジェクトがゼロならば

00:09:47.720 --> 00:09:49.600 align:middle
1 を返します。

00:09:49.760 --> 00:09:51.320 align:middle
もし self が正ならば

00:09:51.480 --> 00:09:55.160 align:middle
例えば factorial 6 ならば
self = 6 です。

00:09:55.480 --> 00:09:58.120 align:middle
もしもこれが true であれば
何を返したら良いでしょう？

00:09:58.280 --> 00:10:01.520 align:middle
6  かける 6 ひく 1 の階乗

00:10:01.680 --> 00:10:04.920 align:middle
この再帰的な定義はわかっています。
それだけのことですが

00:10:05.080 --> 00:10:08.120 align:middle
ここで注目すべきところは

00:10:08.280 --> 00:10:10.440 align:middle
条件分岐である ifTrue: は

00:10:10.600 --> 00:10:13.720 align:middle
メッセージだということです。
コロン付きのキーワードメッセージで

00:10:13.880 --> 00:10:15.320 align:middle
真偽値に送られています。

00:10:15.480 --> 00:10:18.800 align:middle
同様に ifFalse:ifTrue: や
ifTrue:ifFalse: もあります。

00:10:18.960 --> 00:10:21.440 align:middle
これらの条件分岐は

00:10:21.600 --> 00:10:23.320 align:middle
メッセージです。

00:10:23.480 --> 00:10:28.680 align:middle
前に見せたのと同じような
キーワードメッセージです。

00:10:29.080 --> 00:10:30.960 align:middle
つまり、条件分岐はメッセージです。

00:10:31.120 --> 00:10:32.960 align:middle
ループもメッセージです。

00:10:33.120 --> 00:10:35.160 align:middle
1 から 4 までのループを作ると

00:10:35.320 --> 00:10:37.840 align:middle
1 to: 4 do:

00:10:38.000 --> 00:10:40.080 align:middle
そしてブロック。
匿名メソッドです。

00:10:40.240 --> 00:10:45.360 align:middle
ここで、i の値を表示したいと言っています。

00:10:45.520 --> 00:10:50.320 align:middle
そして 1, 2, 3, 4 という値を取ると。

00:10:50.480 --> 00:10:53.840 align:middle
見ての通り、to:do: は

00:10:54.000 --> 00:10:56.280 align:middle
キーワードメッセージです。

00:10:56.520 --> 00:10:59.960 align:middle
loop の形をとったメッセージです。

00:11:00.120 --> 00:11:03.360 align:middle
Pharo には他にもループがあります。
timesRepeat: や to:by:do: などです。

00:11:03.520 --> 00:11:05.360 align:middle
それら全てを見ていきます。

00:11:05.520 --> 00:11:07.520 align:middle
しかし、もう一度言いますが
これらはメッセージです。

00:11:07.680 --> 00:11:11.440 align:middle
to:do: はオブジェクト 1 に
4 と ブロックを引数として送られます。

00:11:11.600 --> 00:11:14.600 align:middle
ブロックについてはすぐ後で説明します。

00:11:14.760 --> 00:11:16.480 align:middle
イテレーターもあります。

00:11:16.640 --> 00:11:18.440 align:middle
イテレータは別のものです。

00:11:18.600 --> 00:11:21.040 align:middle
メッセージ do: を

00:11:21.200 --> 00:11:22.360 align:middle
コレクションに送って

00:11:22.520 --> 00:11:25.680 align:middle
各要素に対して何を適用するかを言います。

00:11:25.840 --> 00:11:29.320 align:middle
各要素ごとに
関数の引数は

00:11:29.480 --> 00:11:34.440 align:middle
1, 2, -4, -86 という値を取ります。

00:11:34.600 --> 00:11:36.960 align:middle
そしてここでやっていることは

00:11:38.440 --> 00:11:40.800 align:middle
各要素について 絶対値を求めて
表示することです。

00:11:40.960 --> 00:11:43.840 align:middle
また言いますが
これは別のコースでやります。

00:11:44.000 --> 00:11:45.720 align:middle
イテレータを説明します。

00:11:45.880 --> 00:11:48.640 align:middle
イテレータは Java 8 にもありますが

00:11:50.280 --> 00:11:53.240 align:middle
Pharo の中核の一部になっています。

00:11:54.280 --> 00:11:55.760 align:middle
ブロックとは何かというと

00:11:55.920 --> 00:11:57.680 align:middle
ブロックは関数に似ています。

00:11:57.840 --> 00:12:01.320 align:middle
数学では f(x) = x²+3 と書きますが

00:12:01.480 --> 00:12:03.920 align:middle
このように書きます。

00:12:04.440 --> 00:12:07.320 align:middle
ブロックを代入する変数を定義します。

00:12:07.480 --> 00:12:10.520 align:middle
ブロックは角括弧の内側です。

00:12:10.680 --> 00:12:13.160 align:middle
ここではブロックには引数が 1 つあります。
x です。

00:12:13.520 --> 00:12:16.640 align:middle
そして本体を書きます。
x+3 です。

00:12:16.800 --> 00:12:18.600 align:middle
このブロックを実行するには

00:12:18.760 --> 00:12:20.880 align:middle
関数の適用です。

00:12:21.040 --> 00:12:24.600 align:middle
これは関数の定義です。
ここで適用します。

00:12:24.760 --> 00:12:30.360 align:middle
ブロックに value: メッセージを送ります。
value: 2 と書きます。

00:12:31.520 --> 00:12:35.080 align:middle
x は 2です。
したがって、ブロックは 5 を返します。

00:12:35.520 --> 00:12:36.680 align:middle
いいですか？

00:12:36.960 --> 00:12:41.560 align:middle
ブロックとは、一種の匿名関数です。
名前がありません。

00:12:41.960 --> 00:12:46.160 align:middle
実際には、ブロックはレキシカルクロージャです。

00:12:46.320 --> 00:12:48.240 align:middle
それを説明します。

00:12:48.400 --> 00:12:50.360 align:middle
ブロックは本物のオブジェクトです。

00:12:50.520 --> 00:12:54.440 align:middle
メソッドの引数として渡されたり
変数に入れられたり

00:12:54.600 --> 00:12:55.720 align:middle
返り値として返されます。

00:12:55.880 --> 00:12:58.600 align:middle
したがって、ブロックは

00:12:58.760 --> 00:13:02.960 align:middle
ウェブアプリケーションでの
ボタンのコールバックに使われます。

00:13:04.480 --> 00:13:06.560 align:middle
ブロックの使い方を見てきました。

00:13:06.720 --> 00:13:08.800 align:middle
イテレーターにはブロックを使います。

00:13:08.960 --> 00:13:11.680 align:middle
ブロックは条件分岐に使われることも
見てきました。

00:13:11.840 --> 00:13:13.600 align:middle
後でブロックについての講義があります。

00:13:13.840 --> 00:13:16.440 align:middle
ブロックはエレガントです。
Eiffel で導入され

00:13:16.600 --> 00:13:19.200 align:middle
最近 Java 8 に導入されました。

00:13:19.360 --> 00:13:21.800 align:middle
C# にもあります。

00:13:21.960 --> 00:13:23.200 align:middle
とても基礎的なものです。

00:13:23.360 --> 00:13:26.320 align:middle
ブロックは Pharo の構文や計算モデルの

00:13:26.480 --> 00:13:30.400 align:middle
とても基礎的な要素です。

00:13:30.720 --> 00:13:33.600 align:middle
Pharo ではどうやってクラスを
定義するのでしょう？

00:13:33.760 --> 00:13:37.480 align:middle
ここにあるブラウザは
パッケージを表示しています。

00:13:37.640 --> 00:13:39.960 align:middle
その内部にクラスがあります。

00:13:40.120 --> 00:13:41.600 align:middle
テンプレートを表示します。

00:13:41.760 --> 00:13:45.240 align:middle
テンプレートは、
デフォルトで Object から継承すること

00:13:45.400 --> 00:13:47.480 align:middle
クラスの名前

00:13:47.640 --> 00:13:51.160 align:middle
例えば Point クラス

00:13:51.320 --> 00:13:53.360 align:middle
そしてクラス定義

00:13:53.520 --> 00:13:56.840 align:middle
クラスオブジェクトがあり
そしてメッセージがあります！

00:13:57.000 --> 00:13:59.680 align:middle

subclass:InstanceVariableNames: align:middle

00:13:59.840 --> 00:14:01.160 align:middle
なんたらかんたら

00:14:01.320 --> 00:14:02.160 align:middle
これを使って

00:14:02.320 --> 00:14:04.960 align:middle
Point クラスを定義すると

00:14:05.120 --> 00:14:07.920 align:middle
インスタンス変数に x と y を入れます。

00:14:08.080 --> 00:14:13.640 align:middle
見せたいことは、構文が常にメッセージと
同じモデルに従っているということです。

00:14:13.800 --> 00:14:16.680 align:middle
通常、手で書くことはありません。

00:14:16.840 --> 00:14:20.960 align:middle
ツールがテンプレートを渡して
あなたはそれを埋めるだけです。

00:14:22.680 --> 00:14:24.480 align:middle
ではメソッドはどうやって定義するのでしょう？

00:14:24.640 --> 00:14:27.400 align:middle
前に言いましたが、メソッドは
public で virtual です。

00:14:27.560 --> 00:14:29.240 align:middle
そしてデフォルトで self を返します。

00:14:29.400 --> 00:14:31.720 align:middle
ブラウザの中にいるときは

00:14:31.880 --> 00:14:34.120 align:middle
ブラウザがテンプレートを出します。

00:14:34.280 --> 00:14:37.160 align:middle
メソッドの名前、そして
コメント…

00:14:37.320 --> 00:14:41.800 align:middle
我々はお行儀よく親切に
コードにコメントを書きます。

00:14:41.960 --> 00:14:46.800 align:middle
一時変数の名前や文を
書き入れます。

00:14:46.960 --> 00:14:50.360 align:middle
これでどうなるのでしょう？
factorial メソッドを見ました。

00:14:50.520 --> 00:14:53.040 align:middle
この場合、Integer クラスにいます。

00:14:53.200 --> 00:14:56.400 align:middle
factorial メソッドを見ると
そこにコードがあります。

00:14:56.560 --> 00:14:59.000 align:middle
メソッド名
コメント

00:14:59.160 --> 00:15:02.040 align:middle
そしてメソッド本体が定義されています。

00:15:03.840 --> 00:15:05.840 align:middle
まとめると、何をやったかというと

00:15:06.000 --> 00:15:09.560 align:middle
メッセージには 3 種類あります。
引数のない単項メッセージ

00:15:09.720 --> 00:15:12.760 align:middle
セレクターが数学記号の二項メッセージ

00:15:12.920 --> 00:15:17.000 align:middle
そして複数の引数を取ることができる
キーワードメッセージです。

286 align:middle
00:15:17,160 --> 00:15:20,720
優先順位があります。
最初に括弧

00:15:20.880 --> 00:15:23.080 align:middle
そして単項、二項、そしてキーワードです。

00:15:23.240 --> 00:15:27.360 align:middle
そして同じレベルのメッセージは
左から右へ。

00:15:27.600 --> 00:15:30.920 align:middle
見てきた通り
構文はとてもコンパクトです。

00:15:31.160 --> 00:15:35.040 align:middle
構文要素は少ししかありませんが
本当に表現力が高いです。

00:15:35.200 --> 00:15:39.480 align:middle
構文要素は主にメッセージと
レキシカルクロージャ（ブロック）です。

00:15:39.640 --> 00:15:42.400 align:middle
メッセージは 3 種類です。

00:15:42.560 --> 00:15:45.160 align:middle
言語を開発する演習問題をすることになります。

00:15:45.320 --> 00:15:49.200 align:middle
いわゆるドメイン特化言語（DSL）を定義します。

