[#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:39923] Re: イテレータとfor文

From: OOTANI TAKASHI <otn@...5.so-net.ne.jp>
Date: 2004-07-24 14:33:18 UTC
List: ruby-list #39923
大谷です。

From: Atoh <atoh@inter7.jp>
Subject: [ruby-list:39920] Re: イテレータとfor文
Date: Sat, 24 Jul 2004 19:45:25 +0900
> あとうです。
> 
> From: Tietew <tietew-ml-ruby-list@tietew.net>
> Subject: [ruby-list:39886] Re: イテレータとfor文
> > なお,enumerator.so を使うと以下のように書けます。

これは今後の勉強課題として。

> あと、最初に書いた IO.readlines の例はちょっと不適切だったかもしれません。
> for line in File.open(filename, "r") do ... end
> の方がファイル全体を一気に読み込まないのでいいようです。
> # IO が Enumerable をインクルードしているなんて知らなかった。勉強不足だ…

これは全然気が付きませんでした。
File.open を使う時は、最初のメールに書いたような、
> file=open("filename")
> begin
>   while line=file.gets
>     puts line
>   end
> ensure
>   file.close
> end
と、までは書きませんが、
File.open("filename") do |file|
  while line=file.gets
    puts line
  end
end
と、他の言語風な読み取りループにしてました。
each が使えて forで書けるんですね。
リファレンスを引くような見方しかしてないと、多言語からの連想でgetsや
readlineを探して見つけた時点で満足してしまっていたんだと思います。
(特に書く時putsを使うので、ついgetsに頭が行く)

あとうさんが前回かかれた
> Enumerable なオブジェクトをどうにか生成するのが良いのではないでしょうか。
も繰り返し処理の時には気に留めたいと思います。

> 最後に、本題と全然関係ありませんが。
> 
> From: takumi-ruby@soloot.jp
> Subject: [ruby-list:39919] サンプル重要
> > 抽象化の苦手な方が、先にこういう具体例の情報を出さずに
> > 議論を進めようとすると、常に論点がずれてしまい振り回されるという
> > 実例ですね。
> 
> いきなり「抽象化の苦手な方」と言い切ってしまうのはちょっと…
> もう少しソフトな言い方をしていただけるとありがたいです。
> 「具体例は議論を円滑に進めることが多いので、今後は早めに」とか。
> 不特定多数の方の読まれる ML では特に、言葉は大事だと思うのです。
> 揚げ足取りみたいですみません。自分が言われたら嫌だなあ、と思ったので。

私個人的には、ネットニュース歴が長いこともあり、ストレートな物言いは好きです。

ただ、TA-KU-MIさんの書かれたような、「素人にもメンテナンスしやすいような
渡し方」一般論を議論するつもりは無かったです。簡単に言うと
「繰り返しについてはforをつかう記法も選択できるといいな」というレベルの
提起のつもりでした。

「相手が理解・メンテナンスしやすい」ことが前提のプログラムを書く話ではなく
「せっかくrubyは読みやすいのに、ブロック付メソッド呼び出しの記法だけは…」
というのが書きたかったことです。
まとめは、
・繰り返しでないものの話が漏れていたこと
・繰り返しならEnumerableなオブジェクトをうまく使えばforで書けることもある
・私がforで書けないと思っていたものも少なくともひとつは実は書けたこと

「そんな余計なことを考えなくても do |x,y| .... end はrubyを知らない
  人にも十分わかりやすいよ」という意見は無かったかと思います。
もちろん、学ぶ気になれば慣れるのは容易というのには同意します。


以下、別の話ですが、
イテレータがブロック付メソッド呼び出しに発展したんでなくて
最初から「ブロック付メソッド呼び出し」という物があり、
その表記法を考えていたら別の形になっていたかもと思います。

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


In This Thread