WEBVTT

00:00:00.480 --> 00:00:03.680 align:middle
このセッションでは Pharo の構文を復習します。

00:00:03.840 --> 00:00:07.000 align:middle
具体的な例を使って構文全体を見直します。

00:00:07.160 --> 00:00:11.480 align:middle
例として実際に使われている
簡単な HTTP アプリケーションを使います。

00:00:11.640 --> 00:00:15.960 align:middle
コードの分析を通して
Pharo の構文を復習します。

00:00:16.720 --> 00:00:20.240 align:middle
このアプリケーションは簡単なウェブアプリで

00:00:20.400 --> 00:00:23.160 align:middle
書籍情報を表示します。

00:00:23.320 --> 00:00:26.840 align:middle
最初の例題にはいります。
Zinc フレームワークを使います。

00:00:27.000 --> 00:00:30.440 align:middle
HTTP フレームワークですが
他のコースで学びます。

00:00:30.600 --> 00:00:34.080 align:middle
Zinc は2つの部分から成っています。
クライアントとサーバです。

00:00:34.240 --> 00:00:37.440 align:middle
HTTPリクエストを作ったりできます。

00:00:37.600 --> 00:00:41.880 align:middle
まず、ZnClient が
クラスであることがわかります。

00:00:42.040 --> 00:00:45.280 align:middle
つまり前に見た通り
大文字のZで始まります。

00:00:45.440 --> 00:00:48.920 align:middle
クラスやグローバル変数の名前は
大文字で始まります。

00:00:49.080 --> 00:00:50.360 align:middle
ZnClient はクラスです。

00:00:50.520 --> 00:00:53.680 align:middle
このクラスに new メッセージを送ります。

00:00:53.840 --> 00:00:56.800 align:middle
ZnClientの新しいインスタンスを生成します。

00:00:56.960 --> 00:01:01.880 align:middle
この新しいインスタンスに
最初のメッセージurl: を引数付きで送ります。

00:01:02.040 --> 00:01:03.880 align:middle
引数は文字列です。

00:01:04.040 --> 00:01:06.760 align:middle
そしてカスケードを使います。

00:01:06.920 --> 00:01:09.680 align:middle
この最後についている「;」の意味を
思い出してください。

00:01:09.840 --> 00:01:13.520 align:middle
新しいメッセージ get を
同じレシーバーに送ります。

00:01:15.040 --> 00:01:20.000 align:middle
このコード片が
ウェブブラウザで

00:01:20.160 --> 00:01:23.040 align:middle
URL を入力して改行キーを押した時の
動作をシミュレートします。

00:01:23.200 --> 00:01:25.760 align:middle
URL を入力して改行を押したら

00:01:25.920 --> 00:01:28.600 align:middle
このウェブアプリのサーバにコンタクトして

00:01:28.760 --> 00:01:31.400 align:middle
HTTP レスポンスを返します。

00:01:31.560 --> 00:01:36.160 align:middle
この場合
書籍番号1番の本についての情報です。

00:01:38.240 --> 00:01:40.200 align:middle
別の例を示します。

00:01:40.360 --> 00:01:43.480 align:middle
Pharo と ZnClient で構築された
別のリクエストです。

00:01:43.640 --> 00:01:47.360 align:middle
同じことです。
ZnClient のインスタンスを生成して

00:01:47.520 --> 00:01:50.560 align:middle
カスケードを使ってメッセージを送ります。

00:01:50.720 --> 00:01:54.320 align:middle
ここで前に習ったことを思い出してください。

00:01:54.480 --> 00:01:56.920 align:middle
Pharo では、キーワードメッセージがあって

00:01:57.080 --> 00:02:01.800 align:middle
このメソッドの名前はformAt:put:です。

00:02:01.960 --> 00:02:05.800 align:middle
Javaの構文で相当するのは

00:02:05.960 --> 00:02:08.960 align:middle
formAtput といったところです。
（メソッド名が1つに繋がっています）

00:02:09.120 --> 00:02:12.600 align:middle
そして括弧の中に全ての引数を書きます。

00:02:15.720 --> 00:02:17.880 align:middle
このスライドでは

00:02:18.040 --> 00:02:21.160 align:middle
Zincを使って構築された

00:02:21.320 --> 00:02:23.200 align:middle
このウェブアプリの完結したコードを
見せます。

00:02:25.480 --> 00:02:29.200 align:middle
このコードの部分部分をいくつか
1つ1つの要素ずつ見ていきましょう。

00:02:29.360 --> 00:02:33.400 align:middle
まず、最初の部分はサーバの構成にあたります。

00:02:33.560 --> 00:02:37.160 align:middle
最初の行で

00:02:37.320 --> 00:02:39.760 align:middle
いくつかローカル変数を宣言しています。

00:02:39.920 --> 00:02:43.080 align:middle
小文字で始まることは覚えていますね。

00:02:43.240 --> 00:02:47.880 align:middle
縦棒に囲まれている books と teapot は
ローカル変数です。

00:02:48.040 --> 00:02:52.520 align:middle
次に代入があります。
これが最初の代入です。

00:02:52.680 --> 00:02:54.600 align:middle
Pharo では代入は := です。

00:02:55.640 --> 00:02:57.480 align:middle
シンボルについて。

00:02:57.640 --> 00:03:00.320 align:middle
3番目に、 #port があります。

00:03:00.480 --> 00:03:03.320 align:middle
コードのこの部分です。

00:03:03.480 --> 00:03:06.520 align:middle
#port はシンボルです。
シンボルは一意の文字列で

53 align:middle
00:03:06,680 --> 00:03:08,360
1つだけ生成されます。

00:03:09.120 --> 00:03:12.560 align:middle
Teapot クラスに送られるメッセージがあります。

00:03:12.720 --> 00:03:15.400 align:middle
例えば、Teapot クラスはここにあります。

00:03:15.560 --> 00:03:17.960 align:middle
そしてメッセージを送って構成します。

00:03:18.120 --> 00:03:19.320 align:middle
configure: を見てください。

00:03:19.480 --> 00:03:23.160 align:middle
思い出してください。
「:」はこのメソッドに

00:03:23.320 --> 00:03:26.520 align:middle
引数を送る印です。

00:03:26.680 --> 00:03:31.240 align:middle
この引数は中括弧を開いて始まり

00:03:31.400 --> 00:03:33.400 align:middle
そして中括弧を閉じて終わります。

00:03:33.560 --> 00:03:37.960 align:middle
中括弧は動的な配列です。

00:03:38.120 --> 00:03:40.200 align:middle
中括弧で囲まれたもの全体で

00:03:40.360 --> 00:03:44.640 align:middle
「.」で区切られた
それぞれの表現式が評価されて

00:03:44.800 --> 00:03:48.400 align:middle
その結果をそれぞれの要素にする
配列を作ります。

00:03:49.000 --> 00:03:51.880 align:middle
configure:メソッドの引数は1つだけです。

00:03:52.040 --> 00:03:57.600 align:middle
中括弧で囲まれた動的な配列の中で

00:03:57.760 --> 00:04:03.720 align:middle
矢印を使って関連（Association）
オブジェクトを作っています。

00:04:03.880 --> 00:04:05.800 align:middle
キーと値です。

00:04:10.440 --> 00:04:13.160 align:middle
サーバを動かすためには

00:04:13.320 --> 00:04:16.120 align:middle
サーバの構成を定義するだけではなく

00:04:16.280 --> 00:04:18.920 align:middle
パスからコンテンツへの経路(route)
も定義します。

00:04:19.080 --> 00:04:23.800 align:middle
もっと小さな例で説明します。
これは動くコードから一部を抜粋したものです。

00:04:23.960 --> 00:04:27.600 align:middle
ウェブアプリで URL を処理する時

00:04:28.960 --> 00:04:31.400 align:middle
この場合、 books/1 のような
形式の URL によって

00:04:31.560 --> 00:04:34.600 align:middle
書籍番号 1 の情報を得る場合には

00:04:34.760 --> 00:04:38.720 align:middle
Zinc アプリで経路(route)を定義します。

00:04:38.880 --> 00:04:42.600 align:middle
GET リクエストを受け取った時に

00:04:42.760 --> 00:04:47.680 align:middle
そのURLが /books/ で始まって
整数が続いていた場合、

00:04:47.840 --> 00:04:52.400 align:middle
（おわかりでしょうか？）
このブロックを実行します。

00:04:52.560 --> 00:04:57.600 align:middle
ブロックは角括弧で囲まれることを
覚えていますね。

00:04:57.760 --> 00:05:00.840 align:middle
引数を取ることができる無名メソッド
のようなものです。

00:05:01.000 --> 00:05:05.080 align:middle
この場合には
引数は :request です。

00:05:05.240 --> 00:05:08.280 align:middle
縦棒で区切られています。

00:05:09.000 --> 00:05:12.240 align:middle
続いてブロックの本体の全体がここにあります。

00:05:12.400 --> 00:05:15.040 align:middle
ここでは1つの表現式だけがあります。
これです。

00:05:15.200 --> 00:05:19.480 align:middle
books オブジェクトに
at: メッセージを送ります。

00:05:23.600 --> 00:05:27.840 align:middle
この書籍コレクションのどの本が欲しいでしょう？

00:05:28.000 --> 00:05:31.640 align:middle
欲しい本は、URLから引数として渡した
IDを持つ本です。

00:05:31.800 --> 00:05:33.520 align:middle
request に問い合わせます。

00:05:33.680 --> 00:05:38.440 align:middle
この変数は
ブロックの先頭で定義されている引数です。

00:05:38.600 --> 00:05:42.440 align:middle
このリクエストから id という名前の
要素を取得します。

00:05:42.600 --> 00:05:45.480 align:middle
この要素を変換します。
覚えているでしょうか、整数です。

00:05:45.640 --> 00:05:47.360 align:middle
整数に変換します。

00:05:47.520 --> 00:05:51.720 align:middle
これで1番の本を得ることができます。

00:05:52.600 --> 00:05:56.760 align:middle
まとめると、このクラスでは
Pharo の構文を

00:05:56.920 --> 00:05:58.320 align:middle
復習しました。

00:05:58.480 --> 00:06:01.040 align:middle
構文に着目して

00:06:01.200 --> 00:06:04.840 align:middle
1つのパッケージを通して
構文を再発見しました。

00:06:05.000 --> 00:06:08.960 align:middle
Teapot でプログラムすることは
とてもどきどきする楽しいことです。

00:06:09.120 --> 00:06:12.920 align:middle
自分で探検して見ましょう。
Smalltalk でダウンロードすることができます。

00:06:13.080 --> 00:06:17.400 align:middle
HTTP アプリケーションをとても簡単に
構築することができます。

00:06:17.560 --> 00:06:21.920 align:middle
また、Zinc もベースに使われています。

00:06:22.080 --> 00:06:26.720 align:middle
Zinc は Pharo の
最も強力なライブラリの1つで

00:06:26.880 --> 00:06:29.240 align:middle
もっと複雑なウェブアプリを作ることができます。

00:06:29.400 --> 00:06:32.480 align:middle
次のコースで見てみましょう。

