[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39868] イテレータとfor文

From: OOTANI TAKASHI <otn@...5.so-net.ne.jp>
Date: 2004-07-20 16:14:37 UTC
List: ruby-list #39868
大谷と申します。
思いつきレベルなので、もしかしたら突拍子も無いことかもしれないんですが、
ちょっと思ったことを書きます。ruby暦1年くらいです。

ときどき、同僚から「こういうことをしたいんだけど」と言われて
2-30行程度のスクリプトを書いてあげることがあります。
相手はruby言語を知らないわけですが、「まあ、見れば変えるべき所は
大体わかるだろうから後は好きに直して」と渡すことが出来ます。
相手に何らかのプログラミング言語と正規表現の知識があれば大丈夫な
場合が多いです。それだけrubyは可読性が高いということだと思います。

ただちょっと、ひっかかるのがイテレータの書法です。
単なるeachのようにforで書ける時はforで書けば読めると思うのですが、
IO.foreach("filename") do |line|  #(A)
  puts line                       #(A)
end                               #(A)
のようなものはイテレータを使うことになりますが、
これはrubyを知らない人にはわかりにくい記法のように思います。
…これくらい簡単ならわかるでしょうけど。イテレータ一般と思ってください。
まあ、
file=open("filename")
begin
  while line=file.gets
    puts line
  end
ensure
  file.close
end
とか普通の言語風に書けば、読めるとは思うのですが、どうせなら(A)が
for line in IO.foreach("filename") do
  puts line
end
と書けると、lineが制御変数であることが(A)よりわかりやすいと思います。
foo.bar do |x,y| .... end は
for x,y in foo.bar do .... end

・rubyを知らない人にもわかりやすくというのが考えとして良いのかどうか
・既存のforの機能と不整合は無いか
・その他、変数のスコープの問題をどうするか
等の問題はあるかと思いますが、いかがでしょうか?

ちょっとサンプルが悪かったような気もしますが、
言いたい事はわかると思うのでそのままにします。

{ |x| ... }の記法はlispの(lambda (x) .... )から来てるのでしょうか?
それならそれで(lambda記法を知ってる人には)わかりやすいと思いますが。

-- 
OOTANI TAKASHI <otn@rc5.so-net.ne.jp>


In This Thread

Prev Next