1 00:00:00,480 --> 00:00:03,680 このセッションでは Pharo の構文を復習します。 2 00:00:03,840 --> 00:00:07,000 具体的な例を使って構文全体を見直します。 3 00:00:07,160 --> 00:00:11,480 例として実際に使われている 簡単な HTTP アプリケーションを使います。 4 00:00:11,640 --> 00:00:15,960 コードの分析を通して Pharo の構文を復習します。 5 00:00:16,720 --> 00:00:20,240 このアプリケーションは簡単なウェブアプリで 6 00:00:20,400 --> 00:00:23,160 書籍情報を表示します。 7 00:00:23,320 --> 00:00:26,840 最初の例題にはいります。 Zinc フレームワークを使います。 8 00:00:27,000 --> 00:00:30,440 HTTP フレームワークですが 他のコースで学びます。 9 00:00:30,600 --> 00:00:34,080 Zinc は2つの部分から成っています。 クライアントとサーバです。 10 00:00:34,240 --> 00:00:37,440 HTTPリクエストを作ったりできます。 11 00:00:37,600 --> 00:00:41,880 まず、ZnClient が クラスであることがわかります。 12 00:00:42,040 --> 00:00:45,280 つまり前に見た通り 大文字のZで始まります。 13 00:00:45,440 --> 00:00:48,920 クラスやグローバル変数の名前は 大文字で始まります。 14 00:00:49,080 --> 00:00:50,360 ZnClient はクラスです。 15 00:00:50,520 --> 00:00:53,680 このクラスに new メッセージを送ります。 16 00:00:53,840 --> 00:00:56,800 ZnClientの新しいインスタンスを生成します。 17 00:00:56,960 --> 00:01:01,880 この新しいインスタンスに 最初のメッセージurl: を引数付きで送ります。 18 00:01:02,040 --> 00:01:03,880 引数は文字列です。 19 00:01:04,040 --> 00:01:06,760 そしてカスケードを使います。 20 00:01:06,920 --> 00:01:09,680 この最後についている「;」の意味を 思い出してください。 21 00:01:09,840 --> 00:01:13,520 新しいメッセージ get を 同じレシーバーに送ります。 22 00:01:15,040 --> 00:01:20,000 このコード片が ウェブブラウザで 23 00:01:20,160 --> 00:01:23,040 URL を入力して改行キーを押した時の 動作をシミュレートします。 24 00:01:23,200 --> 00:01:25,760 URL を入力して改行を押したら 25 00:01:25,920 --> 00:01:28,600 このウェブアプリのサーバにコンタクトして 26 00:01:28,760 --> 00:01:31,400 HTTP レスポンスを返します。 27 00:01:31,560 --> 00:01:36,160 この場合 書籍番号1番の本についての情報です。 28 00:01:38,240 --> 00:01:40,200 別の例を示します。 29 00:01:40,360 --> 00:01:43,480 Pharo と ZnClient で構築された 別のリクエストです。 30 00:01:43,640 --> 00:01:47,360 同じことです。 ZnClient のインスタンスを生成して 31 00:01:47,520 --> 00:01:50,560 カスケードを使ってメッセージを送ります。 32 00:01:50,720 --> 00:01:54,320 ここで前に習ったことを思い出してください。 33 00:01:54,480 --> 00:01:56,920 Pharo では、キーワードメッセージがあって 34 00:01:57,080 --> 00:02:01,800 このメソッドの名前はformAt:put:です。 35 00:02:01,960 --> 00:02:05,800 Javaの構文で相当するのは 36 00:02:05,960 --> 00:02:08,960 formAtput といったところです。 (メソッド名が1つに繋がっています) 37 00:02:09,120 --> 00:02:12,600 そして括弧の中に全ての引数を書きます。 38 00:02:15,720 --> 00:02:17,880 このスライドでは 39 00:02:18,040 --> 00:02:21,160 Zincを使って構築された 40 00:02:21,320 --> 00:02:23,200 このウェブアプリの完結したコードを 見せます。 41 00:02:25,480 --> 00:02:29,200 このコードの部分部分をいくつか 1つ1つの要素ずつ見ていきましょう。 42 00:02:29,360 --> 00:02:33,400 まず、最初の部分はサーバの構成にあたります。 43 00:02:33,560 --> 00:02:37,160 最初の行で 44 00:02:37,320 --> 00:02:39,760 いくつかローカル変数を宣言しています。 45 00:02:39,920 --> 00:02:43,080 小文字で始まることは覚えていますね。 46 00:02:43,240 --> 00:02:47,880 縦棒に囲まれている books と teapot は ローカル変数です。 47 00:02:48,040 --> 00:02:52,520 次に代入があります。 これが最初の代入です。 48 00:02:52,680 --> 00:02:54,600 Pharo では代入は := です。 49 00:02:55,640 --> 00:02:57,480 シンボルについて。 50 00:02:57,640 --> 00:03:00,320 3番目に、 #port があります。 51 00:03:00,480 --> 00:03:03,320 コードのこの部分です。 52 00:03:03,480 --> 00:03:06,520 #port はシンボルです。 シンボルは一意の文字列で 53 00:03:06,680 --> 00:03:08,360 1つだけ生成されます。 54 00:03:09,120 --> 00:03:12,560 Teapot クラスに送られるメッセージがあります。 55 00:03:12,720 --> 00:03:15,400 例えば、Teapot クラスはここにあります。 56 00:03:15,560 --> 00:03:17,960 そしてメッセージを送って構成します。 57 00:03:18,120 --> 00:03:19,320 configure: を見てください。 58 00:03:19,480 --> 00:03:23,160 思い出してください。 「:」はこのメソッドに 59 00:03:23,320 --> 00:03:26,520 引数を送る印です。 60 00:03:26,680 --> 00:03:31,240 この引数は中括弧を開いて始まり 61 00:03:31,400 --> 00:03:33,400 そして中括弧を閉じて終わります。 62 00:03:33,560 --> 00:03:37,960 中括弧は動的な配列です。 63 00:03:38,120 --> 00:03:40,200 中括弧で囲まれたもの全体で 64 00:03:40,360 --> 00:03:44,640 「.」で区切られた それぞれの表現式が評価されて 65 00:03:44,800 --> 00:03:48,400 その結果をそれぞれの要素にする 配列を作ります。 66 00:03:49,000 --> 00:03:51,880 configure:メソッドの引数は1つだけです。 67 00:03:52,040 --> 00:03:57,600 中括弧で囲まれた動的な配列の中で 68 00:03:57,760 --> 00:04:03,720 矢印を使って関連(Association) オブジェクトを作っています。 69 00:04:03,880 --> 00:04:05,800 キーと値です。 70 00:04:10,440 --> 00:04:13,160 サーバを動かすためには 71 00:04:13,320 --> 00:04:16,120 サーバの構成を定義するだけではなく 72 00:04:16,280 --> 00:04:18,920 パスからコンテンツへの経路(route) も定義します。 73 00:04:19,080 --> 00:04:23,800 もっと小さな例で説明します。 これは動くコードから一部を抜粋したものです。 74 00:04:23,960 --> 00:04:27,600 ウェブアプリで URL を処理する時 75 00:04:28,960 --> 00:04:31,400 この場合、 books/1 のような 形式の URL によって 76 00:04:31,560 --> 00:04:34,600 書籍番号 1 の情報を得る場合には 77 00:04:34,760 --> 00:04:38,720 Zinc アプリで経路(route)を定義します。 78 00:04:38,880 --> 00:04:42,600 GET リクエストを受け取った時に 79 00:04:42,760 --> 00:04:47,680 そのURLが /books/ で始まって 整数が続いていた場合、 80 00:04:47,840 --> 00:04:52,400 (おわかりでしょうか?) このブロックを実行します。 81 00:04:52,560 --> 00:04:57,600 ブロックは角括弧で囲まれることを 覚えていますね。 82 00:04:57,760 --> 00:05:00,840 引数を取ることができる無名メソッド のようなものです。 83 00:05:01,000 --> 00:05:05,080 この場合には 引数は :request です。 84 00:05:05,240 --> 00:05:08,280 縦棒で区切られています。 85 00:05:09,000 --> 00:05:12,240 続いてブロックの本体の全体がここにあります。 86 00:05:12,400 --> 00:05:15,040 ここでは1つの表現式だけがあります。 これです。 87 00:05:15,200 --> 00:05:19,480 books オブジェクトに at: メッセージを送ります。 88 00:05:23,600 --> 00:05:27,840 この書籍コレクションのどの本が欲しいでしょう? 89 00:05:28,000 --> 00:05:31,640 欲しい本は、URLから引数として渡した IDを持つ本です。 90 00:05:31,800 --> 00:05:33,520 request に問い合わせます。 91 00:05:33,680 --> 00:05:38,440 この変数は ブロックの先頭で定義されている引数です。 92 00:05:38,600 --> 00:05:42,440 このリクエストから id という名前の 要素を取得します。 93 00:05:42,600 --> 00:05:45,480 この要素を変換します。 覚えているでしょうか、整数です。 94 00:05:45,640 --> 00:05:47,360 整数に変換します。 95 00:05:47,520 --> 00:05:51,720 これで1番の本を得ることができます。 96 00:05:52,600 --> 00:05:56,760 まとめると、このクラスでは Pharo の構文を 97 00:05:56,920 --> 00:05:58,320 復習しました。 98 00:05:58,480 --> 00:06:01,040 構文に着目して 99 00:06:01,200 --> 00:06:04,840 1つのパッケージを通して 構文を再発見しました。 100 00:06:05,000 --> 00:06:08,960 Teapot でプログラムすることは とてもどきどきする楽しいことです。 101 00:06:09,120 --> 00:06:12,920 自分で探検して見ましょう。 Smalltalk でダウンロードすることができます。 102 00:06:13,080 --> 00:06:17,400 HTTP アプリケーションをとても簡単に 構築することができます。 103 00:06:17,560 --> 00:06:21,920 また、Zinc もベースに使われています。 104 00:06:22,080 --> 00:06:26,720 Zinc は Pharo の 最も強力なライブラリの1つで 105 00:06:26,880 --> 00:06:29,240 もっと複雑なウェブアプリを作ることができます。 106 00:06:29,400 --> 00:06:32,480 次のコースで見てみましょう。