On 23. 8. 2019 19:23, Herby VojÄÃk wrote:> On 23. 8. 2019 16:14, Julien wrote:
Hello,
I wanted to have an iterator framework for Pharo for a long time.
So I started building it step by step and today I think that, while it still requires more documentation, it is ready to be announced and used by others.
I present you Iterators : https://github.com/juliendelplanque/Iterators
The idea is that, as described by the iterator design pattern, any object that needs to be walked provides one or many iterators.
In the library, #iterator method is the convention to get the default iterator of any object (if it has one).
Iterators provides a DSL to deal with iterators combination.
It is inspired from shellâs streams manipulation syntax:
- The pipe "|" allows one to chain iterators - The ">" allows one to create a new collection with data transformed through chained iterators - The ">>" allows one to fill an existing collection with data transformed through chained iterators For example, one can write:
iterator := #(1 2 3) iterator. iterator | [ :x | x * 2 ] collectIt | [ :x :y | x + y ] reduceIt
Array "#(12)"
Isn't this something readStream should provide?
str := #(1 2 3) readStream. str | [ :x | x * 2 ] collectIt | [ :x :y | x + y ] reduceIt > Array "#(12)"
It is an object from which you take the front element, one at a time.
Why have something very similar with different name?
Herby Now that I think about it, the problem may be a nomenclature.
This is my understanding, fix me if I am mistaken: There are pull-based and push-based sequences out there. In Smalltalk it can be said a sequence is pull-based if it has #next and #atEnd; it is push-based if it has #do:. AFAICT the tools to read pull-based sequence is called an iterator, and it can have transformations like filter, map etc., sometimes called "ix". The approach to transform push-based sequence (called observable) is called reactive programming ("rx"). It seems you create rx-like library, but called the object iterator. Maybe the set of operations you provide should be define for both push-based and pull-based sequences, and called names that conform to common canon. Herby