[423] Re:クラスメソッドとクラス変数
投稿者:kit
2007/02/20 02:13:25
> 利用者側がclosureを作るのが面倒というのは、
:
> iterate()というメソッドの中にループ処理を隠している分、
> Iteratorを使うよりも記述はシンプルだと思います。
確かに、「面倒」というのは、あまり適切じゃない形容詞でしたね。
each メソッドのような方法は、できる能力が限られている分、むし
ろArrayIterator 的なやり方よりも短い表現で済むのが (crowbar を
含めて) 普通だと思います。
> Iteratorのご紹介ありがとうございます。ただIteratorは良い方法
> だと思いますが、Array自身にeachメソッドを付ける方法とどちら
> が良いかはよく分かりません。
誤解を与えて申し訳ないです。Ruby でいう each メソッドのような
方法が悪いと言ってるわけではありません。each メソッド式のやり
方で十分な場合は、記述が短いという点で優れているわけですから、
そちらを使った方がいいことの方が多いでしょう。
しかし、記述力というか、制御構造の自由度という点では
ArrayIterator 的なやり方の方が優れていますから、もしもどちらか
片方だけしか提供しないから選べと言われたら、ArrayIterator 的方
法がいいんじゃないでしょうか。
実際のところは、たいていの言語のコレクションライブラリが、each
メソッド式と、ArrayIterator 的方法の両方の機能を提供しているよ
うな気がします。
ただ、Iterator という言い方をした時に、each メソッドのような
方法が最初に出てくることには若干違和感があります。
GoF のデザインパターンをはじめ、Iterator という名称を用いた時
には、ArrayIterator() が生成するような、繰り返し用のオブジェク
トを指すことの方が多いんじゃないでしょうか。