西@九大です。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
> あんまりその気になれないんですよねえ。インスタンス変数に代入
> したいなら、ちゃんと代入すべきではないかという気がして。

これを欲しがる人と必要としない人の違いは、「悔しさ」を感じるかどうか?
という「性格の差」、だと最近思い始めました。(だから仕方がない、とも)

例えば、比較的多い(一行に入りきらないくらいの)インスタンス変数を持つよ
うなクラスを初期化する場合、
----------------------------------------------------------------------
def initialize (subject=nil, from=nil, addr=nil, host=nil, time=nil,
                contents=[], link=nil, ...)
  @subject, @from, @addr, @host, @time, @contents, @link = 
    subject, from, addr, host, time, contents, link
  ...
end
----------------------------------------------------------------------
と平気で書ける人がいます。(多分、まつもとさんはこっち)

一方で、
----------------------------------------------------------------------
def initialize (@subject=nil, @from=nil, @addr=nil, @host=nil,
                @time=nil, @contents=nil, @link=nil)
  ...
end
----------------------------------------------------------------------
って書きたいよー!こっちが綺麗じゃん。見易いじゃん。わかりやすいじゃん。
という人もいます。(多分、豊福さん。(すいません、一蓮托生です))

ちなみにわたしは、
    「前者みたいに冗長なものは耐えられない。屈辱的だよ。むきー!」
という立場です。(該当部分を危険区域と呼び、息を止めて書きます)

この「性格の差」を表す別の例として、
	「"i+=1" でいーじゃん」派  vs 「"i++" じゃなきゃ死ぬ」派
の泥沼の戦いがあります。


> カスケードってもしかして
> 
>   open(path).instance_eval {
>      seek(0)
>      print "foo"
>      close
>   }
> 
> とおなじもの? なんだ現状でできるじゃん。> 西さん

なんと!なんだ現状でできるじゃん。> まつもとさん。
でも、.instance_eval が長くて実用的でない(?)ので、

  open(path) {
     seek(0)
     print "foo"
     close
  }

みたいに書けると最高なのですが、この為には文法の変更が必要ですよね。
#別にこの書式({})に拘ってる訳ではないです。
#object .mes1 ..mes2 ..mes3 とかでも、表記法は何でもいいです。

ていうか、このカスケード式メッセージも、恐らく前述の「気質」が原因で、
----------------------------------------------------------------------
socket = TCPSocket.open(server, port)
socket .write("GET " + path + " HTTP/1.0\r\n\r\n")
socket .flush
header = socket .read
----------------------------------------------------------------------
と書くのが、
  [1] 余計な作業(中間?)変数(socket)を定義している。
  [2] しかも、その変数はここでしか利用しない。(後でまた使うなら許せる)
  [3] さらに、それが何度も出てきて、冗長で何か悔しい。
という理由から、苦痛なんです。

やっぱり、
----------------------------------------------------------------------
header = TCPSocket.open(server, port) {
  write("GET " + path + " HTTP/1.0\r\n\r\n")
  flush
  read
}
----------------------------------------------------------------------
と書きたい。ああ、これだと精神衛生上、大変よろしいだろうなぁ。と。
でも多分、上の書き方でも全然平気なんですよね、まつもとさんは。。。

それでは。
------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori / swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------