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 大文字を使います。