ツンデレC#2.0 の yield 入門
Matzにっき さん経由 第3回 新しい繰り返しのスタイル − yield return文とForEachメソッド(1/4) - @IT
記事は普通に良い内容だとおもうのですが、ところどころに無用の引っかかりを感じます。
ここでRubyを説明の例に出したのは、Rubyが優秀な言語であり、C#は努力によってRubyに近づくことができる……という主張を行うためではない。 Rubyは面白い言語ではあるが、本来の能力から 見ると、最近の社会的な評価は過剰に高すぎるという印象がある。
書き方の問題であると思います。Range オブジェクトを作るのに「これはサンプルのためのサンプルでない」と言い訳し、その論拠として Ruby を示し、そこでハッと「だ、だからって Rubyなんかがスゴイっていってるんじゃないんだからねっ!」とツンデレモード....。なにしてるんですか...。
フツーに最後に「今回自作した Range クラスは一見サンプル然としているが、じつは Python などではよく使われるオブジェクトである。・・・。」って書き添えればいいじゃないと思ってしまいます。それに 「る、Rubyなんて、みとめたわけじゃないんだからねっ!」の部分も「あちらにはかわりに C言語スタイルの for文が無い」で十分かとおもうのですけど。――まぁ、だからこそツンデレ萌えなのです*1。
それにしても Rangeなんて、まんまな Python じゃなくって Ruby を引っ張り出してくるあたり失礼しちゃいます。ぷんぷん。
* * *
話は変わって Interaval オブジェクトを使った数え上げループのメリットは、私にとっては 変数の書き間違えなんてレアケースの防止策よりも、単に読みやすいという方が大きく感じます。
/* C */ for (i = 0; i < 10; i++) { .... }
よりも
"Smalltalk" 0 to: 9 do: [:each | .... ]
# Ruby 0 upto 9 do |x| .... end for i in 0..9 .... end
# Python for i in range(0,10): ....
のほうが コードがダンゼン直感的だとおもうのです。
両方が同じように読みやすく感じる人は、for (i=0; i