Digging a bit further, the change from the pointless implementation to
the current implementation was made between Pharo 2.0 and Pharo 3.0
and the current definition was introduced into ST/X some time between
2010 and 2012, which is about the same time as Pharo.
{collect,select,reject}:thenDo: were added to my library on
2004.09.14, exactly a day after the version now in Squeak.�� Which
leads me to believe that I picked the method up from a previous
version of Squeak and that some of the Squeak version history has
been lost.

By the way, it's not just Sets where the current Squeak definition is
a pain in the posterior.�� Consider the following example.

�� |o|
�� o := OrderedCollection new.
�� #[3 1 4 1 5 9]
������ collect: [:byte | byte asFloat]
������ thenDo: [:float | o addLast: float].
�� Transcript print: o; cr.

This works fine in Pharo, in Smalltalk/X, and in my library.
It raises an exception in Squeak.
Or try

���� #[3 1 4 1 5 9]
�������� collect: [:byte | byte odd ifTrue: [byte printString]
�������������������������������������������������������������� ifFalse: [byte]]
�������� thenSelect: [:each | each isNumber]

In Pharo and my library, it straightforwardly answers #[4].
In Squeak, it raises an exception.

So that's sets where the current Squeak definition can give you
trouble, and ByteArrays, and we are not done yet!�� Pretty much
anything other than an Array or an OrderedCollection is going to
get you in trouble in Squeak.�� Just think of the fun you can
have with SortedCollection.�� Ooh, the list goes on and on.

So, the Squeak definition
* does not improve readability.
�� In fact, it REDUCES readability because the human reader stops
�� to ask "why is this portmanteau method used rather than the
�� obvious code" and several minutes later discovers that there
�� is NO reason.
* is useless with most collection classes.
* does nothing to improve performance but just adds overhead.

Are we done yet?



On Tue, 10 Sep 2019 at 01:27, David T. Lewis <lewis@mail.msen.com> wrote:
On Mon, Sep 09, 2019 at 05:46:48PM +1200, Richard O'Keefe wrote:
>
> (3) Oddly enough, the reason that #collect:thenDo: exists in my
>�� �� ��library is that I copied it from Squeak, at a time when it had
>�� �� ��the same definition as Pharo and ST/X.�� Had I known of the change
>�� �� ��in Squeak I would have bitterly opposed it.�� The comment in the
>�� �� ��current Squeak code, that it is for readability, is 100% the
>�� �� ��reverse of the truth.�� Using the version with parentheses is WAY
>�� �� ��clearer than using the portmanteau method.�� Sigh.�� I see they
>�� �� ��broke #collect:thenSelect: in the same way.
>

In Squeak, collect:thenDo: is implemented only in Collection.
The method stamp is dgd 9/13/2004 23:42, which hardly qualifies as
a recent change. And the method stamp for collect:thenSelect: is
sma 5/12/2000.

Dave