From: Akinori MUSHA Date: 2008-12-01T11:32:31+09:00 Subject: [ruby-dev:37238] Re: RSS::Maker.create(version) --pgp-sign-Multipart_Mon_Dec__1_11:37:56_2008-1 Content-Type: text/plain; charset=ISO-2022-JP At Sat, 29 Nov 2008 17:18:20 +0900, Kouhei Sutou wrote: > In <86tz9sutdc.knu@iDaemons.org> > "[ruby-dev:37221] Re: RSS::Maker.create(version)" on Fri, 28 Nov 2008 17:45:21 +0900, > "Akinori MUSHA" wrote: > > > > >  そこで、 RSS::Maker.create(version) のようなメソッドを追加する > > > > のはどうでしょうか。つまり、 > > > > > > RSS::Maker.createではなく、RSS::Maker.newではどうでしょうか? > > > 字面的にはcreateよりもnewの方が自然な気がします。モジュール > > > にnewをするのや、newで返ってくるオブジェクトがレシーバのクラ > > > スではないのは気持ち悪いですが。。。 > > > >  私にとっては、特に後者の気持ち悪さが致命的なレベルでした。 > > わかりました。 > > >  create は Factory Method パターンでも new Klass() をラップする > > インスタンス生成メソッド名によく使われる語なので、違和感はないと > > 思いました。 > > 実を言うと、私はFactory Methodパターンがあまり好きではないん > です。それは、new Klass()のKlassの部分をパラメータ化できない > 言語でしかたなく使うものだと思っていて、RubyのようにKlassの > 部分がパラメータ化できる言語では使わなくてもよいと思っていま > す。  Factory Methodパターンはさておき、せめて RSS::Maker.new(version).is_a?(RSS::Maker) は字面的にも成立してほしいのですが、今の構成・構造だと各クラスが include RSS::Maker するというのは、実装上は可能だけれども意味的に 無理がありますよね。  してみると、上記の「前者」も絡んだ言語仕様との折り合い上の限界、 と言えるのかもしれません。 > >  もし気にされるのであれば、クラスを返すメソッド(以前の仕様では > > RSS::Maker.maker がそれでした)をたとえば class_for() のような > > 名前で用意した方が柔軟かもしれません。 > > > > rssmaker = RSS::Maker.class_for(version).new > > > > という具合です。 > > これもなのですが、実を言うと、私はXXX_forとかメソッド名にfor > やwithなどつなぎの語を入れるのがあまり好きではないんです。そ > んなに英語の文法のようにする必要があるのかなぁと思っていて、 > つなぎの語を入れなくてもわかるような書き方の方が好みだったり > します。  それはわかります。class_for は例なので冗舌な表現でした。 > 話を戻します。 > 1つ案を思いついたのですが、 > > maker = RSS::Maker(version).new > > というのはどうでしょうか? > > URIはこのようなAPIだったと思います。 > (URIオブジェクトじゃなく、URI::HTTPやURI::FTPオブジェクトな > どを返す。)  URI() が返すのはインスタンスですね。クラスと同名のメソッドが 具象クラスを返す例としては Digest があり、実はそれも考えました。 ただ、 RSS::Maker に関してひっかかったのは、将来的に :: は定数の 参照のみとし、メソッド呼び出しは . に統一しようという提案が以前 一定の賛同を得ていた気がすることです。  まあ、 ::() という名前のメソッドを定義できるようにする、という ような救済方法もあり得ますし、今は気にしなくていいのかも。  私は RSS::Maker(version) という案には賛成です。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Mon_Dec__1_11:37:56_2008-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEABECAAYFAkkzTgQACgkQkgvvx5/Z4e76CQCgm2InUpNrGgOybbeckXJleuu2 2jwAnRs/Ujso9EBSeuYIpl+u9J6Qubqc =yJUV -----END PGP SIGNATURE----- --pgp-sign-Multipart_Mon_Dec__1_11:37:56_2008-1--