1
00:00:01,140 --> 00:00:05,200
このビデオでは
Nautilus を使った

2
00:00:05,560 --> 00:00:09,520
より先進的なコード分析を
お見せします。

3
00:00:10,260 --> 00:00:13,220
では Nautilus を開きましょう。
例として

4
00:00:13,387 --> 00:00:14,670
単純なクラス NumberParser を見てみます。

5
00:00:15,880 --> 00:00:19,090
センダー (Sender) と
インプリメンター (Implementors)と呼ばれるものを

6
00:00:19,257 --> 00:00:20,170
見てみましょう。

7
00:00:20,337 --> 00:00:24,640
情報を得る時に
センダーやインプリメンターを見る人がいたら

8
00:00:24,807 --> 00:00:27,350
Pharo に熟達した人だとわかります。

9
00:00:27,517 --> 00:00:29,790
では見てみましょう。

10
00:00:29,957 --> 00:00:31,770
メソッドがあります。
このメソッドを呼んでいるものを

11
00:00:31,937 --> 00:00:33,620
知りたい時
何をしたらいいでしょう？

12
00:00:34,080 --> 00:00:35,030
Sender of を使います。

13
00:00:36,680 --> 00:00:41,260
Senders of で何が得られるのでしょう？

14
00:00:41,427 --> 00:00:43,230
この場合
1つだけ Sender of で出る

15
00:00:43,397 --> 00:00:45,920
メソッドがあります。

16
00:00:46,270 --> 00:00:50,560
readExponent です。
ExponentLetters を呼んでいます。

17
00:00:52,710 --> 00:00:54,310
これは興味深い情報です。

18
00:00:54,610 --> 00:00:56,810
さて、ここで想像してみましょう。
public プロトコルで

19
00:00:57,000 --> 00:01:01,830
nextInteger を選んで
センダー (Senders) してみます。

20
00:01:03,140 --> 00:01:07,710
この潜在的なセンダーのリストが

21
00:01:08,420 --> 00:01:09,740
得られます。

22
00:01:10,810 --> 00:01:14,910
実際、nextInteger メッセージは
そこら中で送られています。

23
00:01:15,370 --> 00:01:17,310
NumberParser クラスで

24
00:01:17,477 --> 00:01:20,590
self とあります。

25
00:01:21,600 --> 00:01:24,180
self ということは

26
00:01:24,347 --> 00:01:25,730
ここにあるメソッドのはずです。

27
00:01:26,740 --> 00:01:30,720
XMLクラスでは

28
00:01:30,887 --> 00:01:33,360
それはあまり明白ではありません。
呼ばれるのがこのメソッドなのかわかりません。

29
00:01:33,527 --> 00:01:36,370
Pharo には型がないので

30
00:01:36,537 --> 00:01:40,060
確実にはわかりません。

31
00:01:40,227 --> 00:01:44,020
実際、システムは
この名前のメッセージが送られたと

32
00:01:44,187 --> 00:01:46,010
言っていて

33
00:01:46,720 --> 00:01:49,000
これを確認するためには例えば

34
00:01:49,167 --> 00:01:51,520
インプリメンター (implementors)が
知りたいと

35
00:01:51,950 --> 00:01:56,090
システムに言うことができます。
このシステムでは

36
00:01:56,257 --> 00:01:57,650
このメソッドが何個実装されているのか。

37
00:01:57,817 --> 00:02:00,870
そのためには
Implementors of を選びます。

38
00:02:02,520 --> 00:02:05,930
Implementors of、と。
ほら

39
00:02:06,097 --> 00:02:08,350
前回は1つしかメソッドがなかったので
呼ばれたメソッドを特定できましたが

40
00:02:08,517 --> 00:02:12,290
今回は複数個あります。

41
00:02:12,457 --> 00:02:16,050
この nextInteger メソッドは

42
00:02:16,217 --> 00:02:19,510
NumberParser に定義されていますが
XMLInteger にも定義されています。

43
00:02:20,900 --> 00:02:24,420
それ以外にも定義されています。

44
00:02:24,587 --> 00:02:26,950
ですから
これらのメソッドは

45
00:02:27,117 --> 00:02:30,000
メッセージが送られた時に

46
00:02:30,167 --> 00:02:34,030
解決されて選ばれるメソッドです。

47
00:02:34,420 --> 00:02:36,670
センダーとインプリメンターは

48
00:02:36,837 --> 00:02:39,650
とても重要だとお判りでしょうか。
インプリメンターでは

49
00:02:39,817 --> 00:02:41,710
あるメソッドを実装する
システム中の全てのクラスを見ることができます。

50
00:02:41,877 --> 00:02:45,300
センダーでは、あるメソッドへの
全ての呼び出しを見ることができます。

51
00:02:45,467 --> 00:02:47,840
センダーは本当にとても重要です。

52
00:02:48,007 --> 00:02:50,940
例題を見つけることができるからです。

53
00:02:51,107 --> 00:02:54,050
どうやってメソッドが使われているかを
見ることができます。

54
00:02:54,520 --> 00:02:56,920
ここでは引数のないメソッドを選びましたが

55
00:02:57,087 --> 00:02:58,590
引数のあるメソッドを選択した場合には

56
00:02:58,757 --> 00:03:02,650
例えば Number クラスの
nextNumberBase: で

57
00:03:02,817 --> 00:03:07,470
センダーをクリックすると

58
00:03:07,637 --> 00:03:12,480
何が出るでしょう？

59
00:03:12,647 --> 00:03:13,280
baseという引数があります。

60
00:03:13,447 --> 00:03:15,050
これは単に

61
00:03:15,217 --> 00:03:18,730
引数がそのまま引数として使われていますね。

62
00:03:18,897 --> 00:03:22,030
しかしこのテストでは

63
00:03:22,420 --> 00:03:27,340
NumberParser をストリーム上で生成して

64
00:03:28,340 --> 00:03:30,550
nextNumberBase:メッセージを

65
00:03:30,717 --> 00:03:32,930
10を引数として送っています。

66
00:03:33,097 --> 00:03:35,030
こうやって

67
00:03:35,197 --> 00:03:36,200
このAPIをどう使うべきかがわかります。

68
00:03:37,000 --> 00:03:41,210
あまりにもよく使われるので
キーボードショートカットになっています。

69
00:03:42,390 --> 00:03:45,800
Nautilus は最初は
マウスなしであらゆる操作ができるように

70
00:03:46,000 --> 00:03:48,550
デザインされていました。

71
00:03:49,000 --> 00:03:51,260
おわかりでしょうか、B はブラウズの意味です。

72
00:03:51,427 --> 00:03:55,890
ブラウズセンダーができます。
N はセンダー (Senders) の N です。

73
00:03:56,057 --> 00:03:59,550
ブラウズインプリメンターは
Implementors の M です。

74
00:04:00,440 --> 00:04:05,260
例えば
「nextNumber」だけを選択して

75
00:04:05,570 --> 00:04:08,780
ブラウズ N とすると

76
00:04:11,110 --> 00:04:14,330
nextNumber のセンダーが得られます。

77
00:04:14,860 --> 00:04:17,740
同じように

78
00:04:17,907 --> 00:04:19,610
インプリメンターを得たい場合には
ブラウズ M

79
00:04:20,890 --> 00:04:22,160
するとインプリメンターが得られます。

80
00:04:23,700 --> 00:04:25,650
クラスについても同様に

81
00:04:25,817 --> 00:04:28,030
NumberParserを使う
他のクラスを知りたい場合には

82
00:04:28,197 --> 00:04:30,290
NumberParser

83
00:04:30,457 --> 00:04:34,730
Analyze を選択すると

84
00:04:34,897 --> 00:04:39,820
Class references があります。

85
00:04:40,000 --> 00:04:43,380
このクラスを使う全てのメソッドが
これで得られます。

86
00:04:47,300 --> 00:04:49,480
見ての通り多くがテストです。

87
00:04:49,740 --> 00:04:53,000
注目してください。
Integer クラスで

88
00:05:00,130 --> 00:05:00,763
パーサーを使っています。

89
00:05:00,930 --> 00:05:05,440
ここで

90
00:05:06,200 --> 00:05:09,300
キーボードショートカットを覚えるコツを
お教えします。

91
00:05:10,050 --> 00:05:14,550
ブラウズ シフト N です。

92
00:05:16,070 --> 00:05:19,250
N は大文字です。
n はセンダーと同様に

93
00:05:19,417 --> 00:05:21,700
使っているメソッドを得るわけです。

94
00:05:21,867 --> 00:05:24,090
ただし、クラスを使っているメソッドです。
クラスはメソッドよりも大きいので

95
00:05:24,257 --> 00:05:25,310
大文字を使います。
