[#25808] break & retry in block — Shin-ichiro HARA <sinara@...>

原です。

15 messages 2005/03/04

[#25812] Re: [ruby-cvs] ruby/test/ruby, ruby/test/logger, ruby/sample, ruby/misc, ruby/lib/xmlrpc, ruby/lib/wsdl/soap, ruby/lib/rexml, ruby/lib/rdoc/parsers, ruby/lib/rdoc/generators, ruby/lib/irb, ruby/lib, ruby/ext/zlib, ruby/ext/win32ole, ruby/ext/tk, ruby/ext/strscan, ruby/ext/socket, ruby/ext/readline, ruby/ext/pty, ruby/ext/openssl, ruby/ext/iconv, ruby/ext/etc, ruby/ext/dl, ruby/ext/curses, ruby/ext/bigdecimal, ruby/ext/Win32API, ruby: * array.c: replace rb_protect_inspect() and rb_inspecting_p() by — Tanaka Akira <akr@...17n.org>

In article <20050304064753.53859C671F@lithium.ruby-lang.org>,

3 messages 2005/03/06

[#25853] conflict method and local variable — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

56 messages 2005/03/10
[#25854] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/10

まつもと ゆきひろです

[#25855] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/10

永井@知能.九工大です.

[#25856] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/10

まつもと ゆきひろです

[#25857] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25858] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25861] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25863] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25864] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25865] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25866] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25869] Re: conflict method and local variable — Shugo Maeda <shugo@...> 2005/03/13

前田です。

[#25875] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/13

まつもと ゆきひろです

[#25878] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/13

永井@知能.九工大です.

[#25882] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/13

まつもと ゆきひろです

[#25884] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/14

永井@知能.九工大です.

[#25885] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/14

まつもと ゆきひろです

[#25888] Re: conflict method and local variable — Shugo Maeda <shugo@...> 2005/03/14

前田です。

[#25946] ext/tk/sample/**/*.gif are broken — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

16 messages 2005/03/27

[#25959] some trouble on ext/tk/sample — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

20 messages 2005/03/29
[#25969] Re: some trouble on ext/tk/sample — Hidetoshi NAGAI <nagai@...> 2005/03/30

永井@知能.九工大です.

[#25970] Re: some trouble on ext/tk/sample — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/03/30

山本です。

[#25973] Re: some trouble on ext/tk/sample — Hidetoshi NAGAI <nagai@...> 2005/03/31

永井@知能.九工大です.

[ruby-dev:25938] Re: Ruby2.0MethodSearchRule

From: TAKAHASHI Masayoshi <maki@...>
Date: 2005-03-23 06:38:56 UTC
List: ruby-dev #25938
高橋征義です。

うわー、書きかけで送ってしまいました。すみません(_o_)(_o_)

Yukihiro Matsumoto <matz@ruby-lang.org>さん wrote:
> In message "Re: [ruby-dev:25935] Re: Ruby2.0MethodSearchRule"
>     on Wed, 23 Mar 2005 14:24:37 +0900, TAKAHASHI Masayoshi <takahashi@twinspark.co.jp> writes:
> 
> |代案がなくて恐縮ですが、デメリットはありそうです。
> |
> |* 「サブクラスでオーバーライドしたいかもしれないものは
> |  あらかじめ self. つきで呼ばないといけない」、といった
> |  防衛的プログラミングが行われそう
> 
> 互換性の点では問題ですが、それ以外では、それは良いことなので
> はないかと思えるのですが。

そうすると、リファクタリングが面倒になることがありそう
なのです。

例をあげます。PHPを書いていてよくあるのですが、非クラスで
書いたものをクラス化したくなったりすることがしばしばあります。


// 例・リファクタ前
function foo() {
  foo1();
  foo2();
}

function foo1() {
  // ...
}

function foo2() {
  // ...
}


しかし、これをFooクラスの中に入れるには、メソッド呼び出しの
書き換えを行わなければなりません。


// 例・リファクタ後
class Foo {
  function foo() {
    $this->foo1();
    $this->foo2();
  //^^^^^^^ これをつける必要がある。めんどくさい。
  }

  function foo1() {
    // ...
  }

  function foo2() {
    // ...
  }
}


たいてい一つだけでは済まないのですが、これは実際に
やってみるとすごく面倒で、はっきりいってリファクタ
リングする気がうせます。

ところが、今のRubyの仕様では何も悩む必要がありません。


def foo()
  foo1()
  foo2()
end

def foo1
 # ...
end

def foo2
 # ...
end


これをFooクラスにするのは、単に「class Foo」と「end」で
くくるだけです。


class Foo
  def foo()
    foo1()
    foo2()
   #^^^^^^そのまま。すばらしい。
  end
  
  def foo1
   # ...
  end
  
  def foo2
   # ...
  end
end


これだけなら、リファクタリングしてみて、駄目だったら
元に戻すのも簡単です。すばらしい。ていうかふつうは
これが当然だよね。うん。と、一人で悦に入ったりも
できます。

……というせっかくのメリットが、self.つきを推奨という
ことにするとなくなってしまうのです。
まあ、防衛的に書かなければよい、ということはあるかも
しれませんが、こういうのってわりとテンプレートパターン
っぽく書きたくなったりするんですよね。その場合には
いずれにせよ同様のリファクタリングが必要になるわけ
ですから、その時に面倒を増やすより、あらかじめself.を
つけとけ、という雰囲気が出そうです。これは避けたいと
強く思うのですが、いかがでしょうか。

高橋征義 (Masayoshi Takahashi)  maki@rubycolor.org
もっとも、個人的には使い勝手に大きく響くポイントだと
思っているのですが、人によりけり、ではあるのかも。

In This Thread