generator-iterator (ジェネレータイテレータ) なんて言い方もあるのね

猛烈に眠い。

ジェネレータイテレータって訳していいのかしら、と疑問に思って調べたというだけの話。ただこの話、ちょっとググっただけでジェネレータ、イテレータに対する妙な誤解なんかもみつかって、なんかちゃんとしたこともいずれ書きたいな、なんてことも思った…、が、いかんせん眠い。

これまで隅の隅々までドキュメントを熟読したことなんかなかったから、ここ数ヶ月かなり色々全体的に眺めることも多くて、知らなかった「用語」にもいっぱいお目にかかったりもした。これはまさにさっき気付いた。

見つけたのは 3.2 の What’s New から辿った inspect モジュールの getgeneratorstate で、初耳だったので 3.x で新しく導入された概念なのかしら(後述)、とも思ったが、これは違った。2.7 のリファレンス (翻訳) でも既に使われてる。「an iterator known as a generator iterator, or more commonly, a generator」と原文で言ってるとおり単に「クド」い言い方ってだけな。

さて。上で「後述」としたハナシ。「妙な誤解が散見される」話に関係するんだけど、「ジェネレータとイテレータの違い」なんてことを考える自体が「アウト」ということをちょっと思ってな。ちょっと考えるための切り口を間違えておるぞそれ、て話。実は「新しい概念なのかしら」と思いつつも、ソレ(区別のはなし)がわたしの理解なのだから「そんなわきゃないよな」と思っておったのです。

この話な、ほんとはもっとちゃんとしたことを書いた方がいいと思うんだけど…、すまん、とにかく眠い。「切り口が違うぞ」というのはね、要は「使う側目線と提供側目線をちゃんと区別・理解しなはれ」つー話。そしてさらに「使う側目線で2つの概念が違ったらいかんのです」つぅ話。これが「誤解しとるぞそれ」的記事を見つけてしまった話。どんなこと書いてあったかはあえて言わない(ヒット数があんまし多くないのでどれのこと言ってるのか多分すぐわかっちゃうから)。










22:22 追記:
眠いながらも少しは補足。「イテレータとジェネレータは同じか違うか」でいえば、無論同じではありません。前者は「反復野郎プロトコル」(冒険野郎マクガイバーではない)。後者は「反復野郎作る君」。わかるよな?

いや…、こんな突き放したこと書くから置いてけぼられて「撒き散らす」輩が出るんだろうな。いずれ…。気が向いたらな。




翌日 追記:
うむ。眠かっただけあっていい過ぎている。「使う側目線で2つの概念が違ったらいかんのです」は言い過ぎ。まぁあとでちゃんと(その気になれば)書くけどさ、「クライアントコードからみて違ってはいけないところは違ってはいけない」というだけのことね。テクニカルにいえば「両者ともイテレータプロトコルに従うのでこのプロトコルが主張するコンセプトのレベルで違ってはいけないし違うはずがない」てことね。(上で攻撃してる「誤解してる記事」はここがわかってないのよ。)