[Pharo-dev] Efficient string concatenation - proposed new

btc at openinworld.com btc at openinworld.com
Sat Nov 16 13:09:45 EST 2013

Code Critic rule Optimization > String concatenation instead of streams 

"Check for string concatenation inside some iteration message. Since 
string concatenation is O(n^2), it is better to use streaming since it 
is O(n) - assuming that n is large enough. As a general principal avoid 
, since the receiver is copied. Therefore chaining , messages will lead 
to multiple useless copies of the receiver."

That is,
    String streamContents: [:s |
        #('abc' 'def' 'ghi')  do: [:each | s nextPutAll: each asString]]

should be used instead of...
    'abc' , 'def' , 'ghi'.

However the first clutters the code.  What about something like...
    { 'abc' . 'def' . 'ghi' } asStreamString
        ^ String streamContents: [:s | self do: [:each | s nextPutAll: 
each asString]]

cheers -ben

More information about the Pharo-dev mailing list