大谷です。 From: Takahiro Kambe <taca / back-street.net> Subject: [ruby-list:39869] Re: イテレータとfor文 Date: Wed, 21 Jul 2004 01:40:32 +0900 > > のようなものはイテレータを使うことになりますが、 > > これはrubyを知らない人にはわかりにくい記法のように思います。 > 単に、「慣れ」のレベルの問題ではないでしょうか。そもそも、イテレータと > いう単語を出した時点で、Cやawkのような言語からは違う場面に進んでいると > 思います。 まあ、それはそうなんですけど。 > > と書けると、lineが制御変数であることが(A)よりわかりやすいと思います。 > > foo.bar do |x,y| .... end は > > for x,y in foo.bar do .... end > ブロックとして、{ |x,y| ... } をProcオブジェクトにして利用するといった > 場合につなげるのが困難ではないでしょうか。 procは無理だなと思いました。言葉が足りなかったかもしれませんが、 イテレータの記法を「変える」という話ではなくて、 リファレンスにもある通り、 (式).each { |x| hogehoge } は変数の有効範囲の問題を除けば for x in 式 do hogehoge end と書いてもいいわけで、 それと同じ意味で、一般の foo.bar { |x| hegohego } も for x in foo.bar do hegohego end と書いてもいいように出来ないかということです。 > > ・rubyを知らない人にもわかりやすくというのが考えとして良いのかどうか > 慣れないうちは、無理してイテレータを使わないとうい選択肢もあるわけです > し、逆にRubyの理解の足を引っ張ることにはならないでしょうか。 Rubyユーザ以外の人(Rubyを書くつもりの無い人)にもわかりやすくという意味です。 せっかく可読性が優れているわけですから。 現状では、Rubyユーザ以外の人に渡すものでは最初のメールに書いた例のように 冗長なのを我慢して、普通の言語風の記法だけ使うというのが正しいんでしょう。 > > ・その他、変数のスコープの問題をどうするか > 言語仕様を複雑にしてしまうだけに思えてしまいます。 機能追加ですから確かにそうですが、eachをつかったイテレータで書けるにも かかわらず現行のfor文があるわけですし(*1)。 それともfor文は歴史的経緯で残っている盲腸なんでしょうか? 要は、 > ・rubyを知らない人にもわかりやすくというのが考えとして良いのかどうか が問題だと思います。 *1:すべてのforはeachで書けると思っていますが間違っていたらすいません。 -- OOTANI TAKASHI <otn / rc5.so-net.ne.jp>