まつもと ゆきひろです

In message "[ruby-list:4267] Sample Program ( mbox to INBOX )"
    on 97/09/11, "nagano" <nagano / ccgw.west.enicom.co.jp> 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なら無理してオブ
ジェクト指向する必要もない気がしますし.

# そーゆーオブジェクト指向言語は多いですが.

                                まつもと ゆきひろ /:|)