Am 25.06.2011 um 06:07 schrieb Alan Rodas:

> Hello folks
> 
> I was wondering why does Smalltlak prefer the printOn: aStream method over 
> the printString method.
> 
> As I work with Java and C# all the time, I'm used to define a printString 
> like method where you return a string representing the object,
> and, today, having to do the same in smalltlak I unconsciously redefined the 
> printString method. As soon as I realize that my collections were using 
> printOn: instead of my redefined printSrting method for printing their 
> contents, I wondered:
> 
> Why was this decision taken? I mean, every other language seems more simple 
> (from the end user point of view, as it does not require the user to 
> understand streams at all), In the other hand, printOn: seems more versatile.
> 
> Pointless question, I know, but I'm quite curious and I cannot seem to find 
> anything about this, and I though that you guys may know.

How do end user interfere with the programming language?  If your user is a 
developer than the statement "..does not require the use to understand streams 
at all..." is somewhat strange because it is something very fundamental a good 
developer should know.

Anyway, there is printString that produces a String and it uses printOn: to 
print on a stream that is used to build the string. For the sole usage you just 
need to know printString. If you start to print over a hierarchy of objects you 
see it very well why you should use streams. 
This is easy to explain from a java perspective. In Java a String is immutable 
and we know that concatenating produces a string for every combination of other 
strings. That is the reason why you need to use StringBuffer/StringBuilder if 
you don't want to lose performance and memory. And that is something other 
programming languages force you to know.
A stream is something you can write subsequently on no matter how many objects 
write on it. You just hand the stream from on object to another and only the 
last one needs to do the string conversion. As Object provides this 
functionality you should implement printOn: on your objects. 

Norbert


Reply via email to