1 00:00:00,560 --> 00:00:01,760 みなさん こんにちは。 2 00:00:01,920 --> 00:00:05,280 このコースでは yourself メソッドについて学びます。 3 00:00:06,040 --> 00:00:10,520 役に立たなさそうに見えますが とても有用なメソッドです。 4 00:00:10,680 --> 00:00:12,280 練習問題から始めましょう。 5 00:00:12,440 --> 00:00:16,480 この表現式 Set new add: 2 を見てください。 6 00:00:18,320 --> 00:00:23,680 値 2 を含む集合が欲しいのですが 7 00:00:23,840 --> 00:00:27,200 この表現式は値 2 だけを返します。 8 00:00:27,360 --> 00:00:31,240 どうして値 2 が得られるのでしょう? 2 を含む集合ではなく。 9 00:00:31,400 --> 00:00:34,880 Set クラスに実装されている add: メソッドを見れば 10 00:00:35,040 --> 00:00:37,800 そのメソッドが引数を返り値として返す ことがわかるでしょう。 11 00:00:42,320 --> 00:00:44,520 表現式 Set new add: 2 では 12 00:00:46,160 --> 00:00:48,880 表現式 Set は Set クラスを返します。 13 00:00:50,480 --> 00:00:54,960 Set クラスに new を送ると 新しい集合が返ってきます。 14 00:00:55,960 --> 00:00:57,520 Set new add: 2 は 15 00:00:57,680 --> 00:01:01,000 add: 2 の返り値を返します。 つまり、2 です。 16 00:01:01,160 --> 00:01:02,720 集合のほうは得られません。 17 00:01:02,880 --> 00:01:05,280 この問題を解決するには 18 00:01:05,440 --> 00:01:09,000 表現式をステップごとに分割して書くことができます。 19 00:01:09,840 --> 00:01:14,280 一時変数をつくります。 変数 s を宣言します。 20 00:01:15,320 --> 00:01:18,920 新しい集合を s に代入します。 21 00:01:19,720 --> 00:01:21,800 s に 2 を追加(add:)します。 22 00:01:22,920 --> 00:01:28,480 これで s は値 2 を含む集合を保持します。 23 00:01:28,640 --> 00:01:31,240 これが欲しかったものです。 24 00:01:31,400 --> 00:01:33,920 これらの表現式を 25 00:01:34,080 --> 00:01:36,440 yourself メソッドを使って簡潔にできます。 26 00:01:36,600 --> 00:01:38,200 yourself メソッドの中身を見ると 27 00:01:38,360 --> 00:01:42,960 たった1つのことしかしません。 self を返すだけです。 28 00:01:43,120 --> 00:01:47,160 self を返すことはメソッドのデフォルトなので省略可能です。 このメソッドは空でも良いのです。 29 00:01:47,320 --> 00:01:49,960 何もしないのです。 レシーバーを返り値とすることを除いて。 30 00:01:50,920 --> 00:01:55,280 このメソッドはそのレシーバーを返すだけですが 31 00:01:56,040 --> 00:01:59,680 それでも有用です。 32 00:02:00,800 --> 00:02:03,400 オペレーターカスケードを使うことで。 33 00:02:03,560 --> 00:02:05,360 2 を追加した後で 34 00:02:05,520 --> 00:02:08,960 yourself メソッドを実行しましょう。 35 00:02:09,120 --> 00:02:11,040 するとレシーバーが返ってきます。 36 00:02:11,200 --> 00:02:14,360 つまり表現式全体の値がレシーバーになります。 37 00:02:14,520 --> 00:02:17,560 つまりこの新しい集合です。 38 00:02:18,480 --> 00:02:22,520 Set new として 39 00:02:22,680 --> 00:02:24,000 新しい集合を手にして 40 00:02:24,760 --> 00:02:28,600 add: 2 を Set new に適用すると 41 00:02:28,760 --> 00:02:30,320 2 が返ってきます。 42 00:02:30,480 --> 00:02:34,280 しかしオペレーターカスケードを使って yourself と続けることで 43 00:02:34,440 --> 00:02:39,240 表現式全体はこの新しい集合を返します。 44 00:02:40,360 --> 00:02:43,240 なぜ? 45 00:02:43,400 --> 00:02:45,760 カスケードは最後の表現式が返した値を返す 仕掛けになっています。 46 00:02:46,600 --> 00:02:48,800 このカスケードは 47 00:02:48,960 --> 00:02:52,840 yourself が返す値を返します。 48 00:02:53,000 --> 00:02:56,960 yourself はよくカスケードと一緒に 49 00:02:57,120 --> 00:03:00,120 インスタンス生成のメソッドで使われます。 50 00:03:00,280 --> 00:03:04,840 クラスに送られるメッセージに対応する 51 00:03:05,000 --> 00:03:07,280 クラスメソッドで 52 00:03:07,440 --> 00:03:09,240 新しいインスタンスを返します。 53 00:03:10,040 --> 00:03:12,360 新しい Set を 54 00:03:12,520 --> 00:03:16,440 ある要素を予め含めて生成する時には 55 00:03:16,600 --> 00:03:21,680 Set に with: anObject メッセージを 送ります。 56 00:03:21,840 --> 00:03:25,520 このコードは新しい集合を作って 57 00:03:25,680 --> 00:03:27,920 変数 instance に格納して 58 00:03:28,680 --> 00:03:31,600 引数を instance に追加して 59 00:03:31,760 --> 00:03:34,080 instance を返り値とします。 60 00:03:34,240 --> 00:03:38,080 この式全体を yourself を使って 61 00:03:38,240 --> 00:03:42,080 より短く、より慣用句的に書くことができます。 62 00:03:42,240 --> 00:03:45,920 このコードは Pharo ではよくあるものです。 63 00:03:46,080 --> 00:03:50,000 セミコロン、つまりカスケードと yourselfを 64 00:03:50,160 --> 00:03:52,400 習得することはとても大切です。 65 00:03:53,080 --> 00:03:56,920 このコースを終わるにあたって 次のことを覚えておいてください。 66 00:03:57,080 --> 00:04:00,480 メソッドの中には とてもシンプルでありながら 67 00:04:00,640 --> 00:04:03,240 とてもパワフルで頻繁に使われるものが あります。 68 00:04:05,200 --> 00:04:09,440 カスケード、つまりセミコロンと yourself メソッドは 69 00:04:09,600 --> 00:04:11,880 とても頻繁に組み合わせられて使われます。 70 00:04:12,040 --> 00:04:15,240 カスケードと yourself を使うことで 式全体の値が期待したものであることを 71 00:04:15,400 --> 00:04:17,960 確実にすることができます。