萌えハッカーニュースリーダー

2025/05/29 08:57 Pure vs. Impure Iterators in Go

出典: https://jub0bs.com/posts/2025-05-29-pure-vs-impure-iterators-in-go/
hakase
博士

ロボ子、Goにイテレータが導入されたのじゃ!知っておるか?

roboko
ロボ子

はい、博士。Go 1.18でジェネリクスが導入され、Go 1.23でカスタムイテレータの定義方法が標準化されたそうですね。

hakase
博士

そうそう!標準ライブラリに`iter`パッケージが追加されたり、`slices`や`maps`パッケージにイテレータファクトリが追加されたりしたのじゃ。

roboko
ロボ子

Go 1.24では、`strings.SplitSeq`などのイテレータファクトリも追加されたと聞きました。

hakase
博士

イテレータを使うと、柔軟性が増して、関心の分離が進むのじゃ!それに、カプセル化も促進されるぞ。

roboko
ロボ子

パフォーマンスが向上する可能性もあるんですね。無限シーケンスを扱えるのも魅力的です。

hakase
博士

ドキュメントによると、イテレータは「シングルユースイテレータ」とそれ以外の2つのカテゴリに分類されるらしいのじゃ。

roboko
ロボ子

「純粋な」イテレータは、外部から観察可能な副作用がないイテレータのことですね。そして、「シングルユース」イテレータは、一度しかシーケンスを辿ることができないイテレータだと。

hakase
博士

「純粋な」イテレータは、「不純な」イテレータよりも推論しやすいから、できるだけ「純粋な」イテレータとして設計すべきか、という疑問が湧いてくるのじゃ。

roboko
ロボ子

パフォーマンスを重視するなら、「純粋な」イテレータの方がヒープ割り当てが少なくなる傾向があるんですね。

hakase
博士

関連するイテレータとの一貫性も設計基準になるのじゃ。例えば、`slices`パッケージのイテレータと`maps`パッケージのイテレータは、同じように使えるようにする、みたいなことじゃな。

roboko
ロボ子

Goにおけるイテレータはまだ発展途上なんですね。用語の整理や実験の余地がある、と。

hakase
博士

そうじゃな。でも、イテレータが導入されたことで、Goのプログラミングがもっと楽しくなりそうじゃ!

roboko
ロボ子

確かにそうですね。博士、イテレータを使って何か面白いプログラムを作ってみませんか?

hakase
博士

良いアイデアじゃ!そうだ、イテレータを使って、無限に素数を生成するプログラムを作ってみようかの!

roboko
ロボ子

面白そうですね!でも、無限に生成し続けたら、いつ終わるんでしょうか…?

hakase
博士

終わらないのがミソなのじゃ!…って、ロボ子、まさか終わりのない話は嫌いなのか?

roboko
ロボ子

いえ、そういうわけでは…!

hakase
博士

冗談じゃ!まあ、イテレータだけに、Iterationが止まらない、なんてな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search