fromdusktildawnさんの分裂勘違い君劇場「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」を読んだ。
こうして議論が膨らんで、何が何でもRubyとか、何が何でもCLOSとか、そういう誤読を防止する仕組みができあがっていくことは喜ばしい。それ以上に、これを機会にRubyに関心を持つ人がでてきたり、JavaScriptを再発見したりする人がでてくるようなことがあったならば、喜ばしい。「騒げ騒げ、もっと騒げ」
のだけれども、取り合えず言うべきことは言っておこう。
これは実はちょっと心外。「実務上、メタプログラミングは便利だよ」と言いたくてその一例たるattr_accessorの説明の直後に
ですから,このようなメソッドを自分で作ることもできます ... 少しでも似たようなコードの反復があるならばメタプログラミングによって実装や保守の手間を軽減できます\ getter/setterのようにあまり変化する余地のないものであればまだよいですが,仕様に応じて変更の必要が出てきた場合,その変更をコードに漏れなく反映するのは大変です
と書いた私としてはgetter/setterという例がやはり良くなかったなーと。getter/setterに注目して、そこだけに注目する議論は、私の説明不足が原因とは言え嬉しくないなーと。
長すぎて削られてしまったRuby/AJPのクラス群自動生成の例を、やっぱり何が何でも紙面に出してもらうべきだったかなぁと。
getter/setterはC#ではわざわざブロパティ定義構文を作って楽にしてるわけだし、そもそもIDEがあればJavaでも全然問題ないというのはおっしゃる通り。なんだけれども、分裂勘違い君劇場「Rubyの生産性の高さはどこまで本当か?」において
Rubyのシンプルなプロパティ定義として、以下のようなサンプルがあり、setterとgetterをわざわざ記述しなければならないJavaの冗長さと比較していますが
という風にメタプログラミングの文脈から切り離してわざわざこれをクローズアップするのは「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」で自身が指摘している引用トリックそのものだろうと。
まあ、3点断りを付けると、
「Rubyの生産性の高さはどこまで本当か?」は、私が期待していた突っ込みそのもので、しかもそれを分裂勘違い君劇場がやってくれたというのは嬉しい限りなんだけれども、getter/setterネタだけじゃなく「その他、細々とした部分」の節だけはどうにも不満がいっぱいで。
実際には、Javaでは、以下のようにカウンタを使わない、シンプルなループ記述ができます。
という記述も、だから私は脚注にそう書いてるじゃん。とか。これも引用のトリックだぁな。
Matzにっきの記事の引用部だけ見れば「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」が指摘するように、「誤読を招く」「本来よりもあまりに強い主張をしているようによませる」アンフェアな引用だなぁ。引用トリックだなぁ。
でも、じゃあ、まつもとさんの言ってることは無効なのかというとわからない。
それは結局「Rubyの生産性の高さはどこまで本当か?」でfromdusktildawnさんが指摘する、(メタプログラミングによるエレガントな解決は)
というのが真かどうかに掛かるかなぁと。もしこれが偽だとすれば、まつもとさん言うfromdusktildawnさんが「(メタプログラミングを必要とする局面において)些細な文法の違いから来る記述力を無視しすぎ」と言う指摘は、「研究室レベルで」というコンテキストを外しても有効となる。
私の実感では偽なんだけど、客観的根拠を示せないからなんとも。
それから、たぶん、まつもとさんの発言はブロック構文にも掛かっている。何しろ私がブロック構文を最初に理解したときにまず思ったのが「何でlambdaじゃダメなの?」だし、fromdusktildawnさんの主張も分かる。匿名クラスでできるのは分かってる。delegateでできるのは分かってる。というか、lambdaかわいいよlambdaの一言に尽きる。
でも、使ってみて思ったのは、Rubyのブロック構文がメソッド呼び出しの括弧を省略可能というところと結び付いて「記述力」をもたらしてるということ。いつも似たような例で恐縮だけれどもRakeとか。Rakeを見るまで、私ゃRubyの記述力がそれほど優れていると思ってなかったし。それから、その種の記述力の差は大きいと思えばこそ、(どうも私が当初、良く吟味せずに舞い上がった程簡単な話ではない模様だけれども)矢野勉さんの発想は素晴らしいと思ったのだ。
> 感覚的に区別がつきませんか?
うんにゃ。やっぱりねー、というところです。
「脚注まで全部読まずにレスをする」のが「ひどい手落ち」とも思いませんし、事情は承知しました。
「やっぱりねー」と思うくらいなので拡張forのほうの件は言わなくてもいいことでしたね。言わなくてもいいことを言ってしまったのは、やっぱり、プロパティのほうの扱いが不満で感情的になっていたかも知れません。申し訳ありません。
よくわからない理由により、コメントが即座には反映されないかもしれませんか゛、ボタンを押して元の画面に戻ってきたならたぶん正しく送信されています。
>>
Rubyのブロック構文がメソッド呼び出しの括弧を省略可能というところと結び付いて「記述力」をもたらしてるということ。
>
「実務上、メタプログラミングは便利だよ」と言いたくてその一例たるattr_accessorの説明の直後に
>
よく使われるメタプログラミングの機能としては「attr_reader」や「attr_accessor」があります。Javaで開発しているとき,リスト1のようにデータにアクセスするためのgetterやsetterをいちいち書くのにうんざりしたことはないでしょうか。Rubyでは,オブジェクトのプロパティを取得/設定するメソッドを,リスト2上のように簡単に記述できます。
<略>
ですから,このようなメソッドを自分で作ることもできます。
>
だから私は脚注にそう書いてるじゃん。
<<
については、脚注を読んでなかったもので(笑)。失礼しました。
でも、これも、脚注まで全部読まずにレスをする人って、そこまでひどい手落ちなんですかね?
少なくとも、「明らかに脚注まで全部読んで分かっているくせに、脚注を読んでいないフリをした」という悪質なケースだったというには、無理があるような気がしますけど。
というか、yuguiさん、冷静に見て、明らかに悪質な曲解引用をしているケースと、単なる誤読は、感覚的に区別がつきませんか?
その区別がつかない、ということであれば、オイラには、これ以上言うことはないですね。