WEBVTT

00:00:01.140 --> 00:00:05.200 align:middle
このビデオでは
Nautilus を使った

00:00:05.560 --> 00:00:09.520 align:middle
より先進的なコード分析を
お見せします。

00:00:10.260 --> 00:00:13.220 align:middle
では Nautilus を開きましょう。
例として

00:00:13.387 --> 00:00:14.670 align:middle
単純なクラス NumberParser を見てみます。

00:00:15.880 --> 00:00:19.090 align:middle
センダー (Sender) と
インプリメンター (Implementors)と呼ばれるものを

00:00:19.257 --> 00:00:20.170 align:middle
見てみましょう。

00:00:20.337 --> 00:00:24.640 align:middle
情報を得る時に
センダーやインプリメンターを見る人がいたら

00:00:24.807 --> 00:00:27.350 align:middle
Pharo に熟達した人だとわかります。

00:00:27.517 --> 00:00:29.790 align:middle
では見てみましょう。

00:00:29.957 --> 00:00:31.770 align:middle
メソッドがあります。
このメソッドを呼んでいるものを

00:00:31.937 --> 00:00:33.620 align:middle
知りたい時
何をしたらいいでしょう？

00:00:34.080 --> 00:00:35.030 align:middle
Sender of を使います。

00:00:36.680 --> 00:00:41.260 align:middle
Senders of で何が得られるのでしょう？

00:00:41.427 --> 00:00:43.230 align:middle
この場合
1つだけ Sender of で出る

00:00:43.397 --> 00:00:45.920 align:middle
メソッドがあります。

00:00:46.270 --> 00:00:50.560 align:middle
readExponent です。
ExponentLetters を呼んでいます。

00:00:52.710 --> 00:00:54.310 align:middle
これは興味深い情報です。

00:00:54.610 --> 00:00:56.810 align:middle
さて、ここで想像してみましょう。
public プロトコルで

00:00:57.000 --> 00:01:01.830 align:middle
nextInteger を選んで
センダー (Senders) してみます。

00:01:03.140 --> 00:01:07.710 align:middle
この潜在的なセンダーのリストが

00:01:08.420 --> 00:01:09.740 align:middle
得られます。

00:01:10.810 --> 00:01:14.910 align:middle
実際、nextInteger メッセージは
そこら中で送られています。

00:01:15.370 --> 00:01:17.310 align:middle
NumberParser クラスで

00:01:17.477 --> 00:01:20.590 align:middle
self とあります。

00:01:21.600 --> 00:01:24.180 align:middle
self ということは

00:01:24.347 --> 00:01:25.730 align:middle
ここにあるメソッドのはずです。

00:01:26.740 --> 00:01:30.720 align:middle
XMLクラスでは

00:01:30.887 --> 00:01:33.360 align:middle
それはあまり明白ではありません。
呼ばれるのがこのメソッドなのかわかりません。

00:01:33.527 --> 00:01:36.370 align:middle
Pharo には型がないので

00:01:36.537 --> 00:01:40.060 align:middle
確実にはわかりません。

00:01:40.227 --> 00:01:44.020 align:middle
実際、システムは
この名前のメッセージが送られたと

00:01:44.187 --> 00:01:46.010 align:middle
言っていて

00:01:46.720 --> 00:01:49.000 align:middle
これを確認するためには例えば

00:01:49.167 --> 00:01:51.520 align:middle
インプリメンター (implementors)が
知りたいと

00:01:51.950 --> 00:01:56.090 align:middle
システムに言うことができます。
このシステムでは

00:01:56.257 --> 00:01:57.650 align:middle
このメソッドが何個実装されているのか。

00:01:57.817 --> 00:02:00.870 align:middle
そのためには
Implementors of を選びます。

00:02:02.520 --> 00:02:05.930 align:middle
Implementors of、と。
ほら

00:02:06.097 --> 00:02:08.350 align:middle
前回は1つしかメソッドがなかったので
呼ばれたメソッドを特定できましたが

00:02:08.517 --> 00:02:12.290 align:middle
今回は複数個あります。

00:02:12.457 --> 00:02:16.050 align:middle
この nextInteger メソッドは

00:02:16.217 --> 00:02:19.510 align:middle
NumberParser に定義されていますが
XMLInteger にも定義されています。

00:02:20.900 --> 00:02:24.420 align:middle
それ以外にも定義されています。

00:02:24.587 --> 00:02:26.950 align:middle
ですから
これらのメソッドは

00:02:27.117 --> 00:02:30.000 align:middle
メッセージが送られた時に

00:02:30.167 --> 00:02:34.030 align:middle
解決されて選ばれるメソッドです。

00:02:34.420 --> 00:02:36.670 align:middle
センダーとインプリメンターは

00:02:36.837 --> 00:02:39.650 align:middle
とても重要だとお判りでしょうか。
インプリメンターでは

00:02:39.817 --> 00:02:41.710 align:middle
あるメソッドを実装する
システム中の全てのクラスを見ることができます。

00:02:41.877 --> 00:02:45.300 align:middle
センダーでは、あるメソッドへの
全ての呼び出しを見ることができます。

00:02:45.467 --> 00:02:47.840 align:middle
センダーは本当にとても重要です。

00:02:48.007 --> 00:02:50.940 align:middle
例題を見つけることができるからです。

00:02:51.107 --> 00:02:54.050 align:middle
どうやってメソッドが使われているかを
見ることができます。

00:02:54.520 --> 00:02:56.920 align:middle
ここでは引数のないメソッドを選びましたが

00:02:57.087 --> 00:02:58.590 align:middle
引数のあるメソッドを選択した場合には

00:02:58.757 --> 00:03:02.650 align:middle
例えば Number クラスの
nextNumberBase: で

00:03:02.817 --> 00:03:07.470 align:middle
センダーをクリックすると

00:03:07.637 --> 00:03:12.480 align:middle
何が出るでしょう？

00:03:12.647 --> 00:03:13.280 align:middle
baseという引数があります。

00:03:13.447 --> 00:03:15.050 align:middle
これは単に

00:03:15.217 --> 00:03:18.730 align:middle
引数がそのまま引数として使われていますね。

00:03:18.897 --> 00:03:22.030 align:middle
しかしこのテストでは

00:03:22.420 --> 00:03:27.340 align:middle
NumberParser をストリーム上で生成して

00:03:28.340 --> 00:03:30.550 align:middle
nextNumberBase:メッセージを

00:03:30.717 --> 00:03:32.930 align:middle
10を引数として送っています。

00:03:33.097 --> 00:03:35.030 align:middle
こうやって

00:03:35.197 --> 00:03:36.200 align:middle
このAPIをどう使うべきかがわかります。

00:03:37.000 --> 00:03:41.210 align:middle
あまりにもよく使われるので
キーボードショートカットになっています。

00:03:42.390 --> 00:03:45.800 align:middle
Nautilus は最初は
マウスなしであらゆる操作ができるように

00:03:46.000 --> 00:03:48.550 align:middle
デザインされていました。

00:03:49.000 --> 00:03:51.260 align:middle
おわかりでしょうか、B はブラウズの意味です。

00:03:51.427 --> 00:03:55.890 align:middle
ブラウズセンダーができます。
N はセンダー (Senders) の N です。

00:03:56.057 --> 00:03:59.550 align:middle
ブラウズインプリメンターは
Implementors の M です。

00:04:00.440 --> 00:04:05.260 align:middle
例えば
「nextNumber」だけを選択して

00:04:05.570 --> 00:04:08.780 align:middle
ブラウズ N とすると

00:04:11.110 --> 00:04:14.330 align:middle
nextNumber のセンダーが得られます。

00:04:14.860 --> 00:04:17.740 align:middle
同じように

00:04:17.907 --> 00:04:19.610 align:middle
インプリメンターを得たい場合には
ブラウズ M

00:04:20.890 --> 00:04:22.160 align:middle
するとインプリメンターが得られます。

00:04:23.700 --> 00:04:25.650 align:middle
クラスについても同様に

00:04:25.817 --> 00:04:28.030 align:middle
NumberParserを使う
他のクラスを知りたい場合には

00:04:28.197 --> 00:04:30.290 align:middle
NumberParser

00:04:30.457 --> 00:04:34.730 align:middle
Analyze を選択すると

00:04:34.897 --> 00:04:39.820 align:middle
Class references があります。

00:04:40.000 --> 00:04:43.380 align:middle
このクラスを使う全てのメソッドが
これで得られます。

00:04:47.300 --> 00:04:49.480 align:middle
見ての通り多くがテストです。

00:04:49.740 --> 00:04:53.000 align:middle
注目してください。
Integer クラスで

00:05:00.130 --> 00:05:00.763 align:middle
パーサーを使っています。

00:05:00.930 --> 00:05:05.440 align:middle
ここで

00:05:06.200 --> 00:05:09.300 align:middle
キーボードショートカットを覚えるコツを
お教えします。

00:05:10.050 --> 00:05:14.550 align:middle
ブラウズ シフト N です。

00:05:16.070 --> 00:05:19.250 align:middle
N は大文字です。
n はセンダーと同様に

00:05:19.417 --> 00:05:21.700 align:middle
使っているメソッドを得るわけです。

00:05:21.867 --> 00:05:24.090 align:middle
ただし、クラスを使っているメソッドです。
クラスはメソッドよりも大きいので

00:05:24.257 --> 00:05:25.310 align:middle
大文字を使います。

