From: matz@... (Yukihiro Matsumoto) Date: 1997-09-11T16:13:16+09:00 Subject: [ruby-list:4268] Re: Sample Program ( mbox to INBOX ) まつもと ゆきひろです In message "[ruby-list:4267] Sample Program ( mbox to INBOX )" on 97/09/11, "nagano" writes: |長野@新日鉄情報通信システム と申します。 |#ここで、cmail をご存知の方って、どのくらいいらっしゃる |#のでしょう? 何度か話が出たことがあるので名前だけは知っている人は結構いる のではないかと思います.最近は私よりも詳しい方もいらっしゃい ますし. # 前田さんとか…. |ここの所は、こうした方が{良い|ruby らしい}等のご意見を |いただけたら嬉しいなぁと思っています。 ええと,末尾にコメントを付けておきます. |#最終的には、ruby で書いた yet another cmail を目標に、 |#ruby を勉強していきたいと思ってます。 いいなあ,私の数年来の課題を実現して下さいませ. では,コメントです @month = {"Jan" => "01", "Feb" => "02", "Mar" => "03", "Api" => "04", \ "May" => "05", "Jun" => "06", "Jul" => "07", "Aug" => "08", \ "Sep" => "09", "Oct" => "10", "Nov" => "11", "Dec" => "12" } # @monthは定数にした方が読みやすく効率も良いでしょう. def put_data( cnt ) return @header[cnt] end def getmax return @max_cnt end このput_dataとgetmaxの使われ方をみているとイテレータにした方 が良さそうです. while( j <= k.getmax ) p = k.put_data(j) ... j += 1 end という部分が2箇所ありますが,これは k.each do |p| ... end あるいは for p in k ... end と書けた方が美しいのではないでしょうか.インデックス変数jや 最大値を求めるgetmaxは不要になります.これを実現するために は,イテレータメソッドeachを実装します. def each for p in @header yield p end end という感じでしょうか.これだけでforを使うことが出来るように なります.イテレータはちょっととっつきが悪いですが,覚えてお くと便利な機能です.「イテレータを征するものはrubyを征する」 ともいわれています(本当?). さて,最後に気になったのはMbox_to_inboxは本当にクラスである べきだろうか,という点です.いや,もちろん現状では必要ないの は当然なのですが,将来に渡ってインスタンス化して嬉しいことが あるのかどうか,という点が気になります.rubyなら無理してオブ ジェクト指向する必要もない気がしますし. # そーゆーオブジェクト指向言語は多いですが. まつもと ゆきひろ /:|)