﻿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
次のコースで見てみましょう。
