Randal L. Schwartz wrote:
"Claus" == Claus Kick claus_kick@web.de writes:
Claus> pattern := 'HI'. Claus> replacement := 'HELLO'. Claus> resultString := ''. Claus> i := 1. Claus> answer do:[:element | (element = pattern ) ifTrue:[i = 1 ifTrue:[resultString Claus> := resultString, replacement . i := i + i] ifFalse:[resultString := Claus> resultString, ' ', replacement ]] ifFalse:[resultString := resultString, ' ', Claus> element]]. Claus> ^resultString.
That sort of "build a string by repeated concatenation" scares me. Might be ok for very short things, but for longer things, learn to use streams.
Honestly, I never think of Streams in this context. One day, I might actually remember to use them.
For example, look at the implementation of String>>expandMacrosWithArguments: to see how to use a ReadStream on the source and WriteStream to hold the destination.
Ah, ok, I will really note this down this time.
Also, if the logic gets to be nested blocks, I try to refactor that rather quickly.
How would you refactor something like that?