> On 25 Jun 2018, at 12:56, Herbert Vojčík <he...@mailbox.sk> wrote:
> 
> 
> 
> Peter Uhnák wrote on 23. 6. 2018 15:39:
>> Hi,
>> I'm starting to familiarize myself with new streams, and one thing I've 
>> noticed is the removal of #lineEndConvention (which I use all the time).
>> So a statement like this
>> aFile writeStreamDo: [ :stream |
>> stream lineEndConvention: #lf.
>> stream << '...'> ].
>> has to be written like so
>> aFile writeStreamDo: [ :rawStream | |stream|
>> stream := (ZnNewLineWriterStream on: rawStream) forLf.
>> stream << '...'
>> ].
>> which feels very messy because I am mixing writing with the configuration. 
>> And I don't even take account for buffered/encoded decorators. Plus it 
>> increases the incidental complexity -- I need another variable, and I can 
>> accidentally write to the wrong stream, etc.
>> Would a method like #writeStream:do: (or #writeStreamTransform:do:) make 
>> sense? E.g.
>> aFile writeStreamTransform: [ :stream | (ZnNewLineWriterStream on: stream) ] 
>> do: [ :stream |
>> stream << '...'
>> ]
> 
>  aFile writeStreamDo: [ :rawStream |
>    (ZnNewLineWriterStream on: rawStream) in: [ :stream |
>      stream << '...' ] ].
> 
> As for transformation, I'd go for some more generic (functional?) approach 
> like:
> 
>  aFile writeStreamDo: ([:x | ZnNewLineWriterStream on: x] pipe: [ :stream |
>    stream << '...' ]).

I like the first version with the (little known, but still standard and clear) 
#in: selector.
I can't see how the second is 'better', as it looks equally 'complex' but adds 
a new selector, #pipe:
All this, IMHO.

> Herby
> 
>> To separate the composition from the usage?
>> Thanks,
>> Peter


Reply via email to