[Newbies] Re: A do with ONLY index? (plus,. a style question)

Klaus D. Witzel klaus.witzel at cobss.com
Fri Feb 9 06:58:32 UTC 2007


Hi Blake,

on Fri, 09 Feb 2007 02:17:28 +0100, you wrote:
> On Sun, 04 Feb 2007 02:16:09 -0800, Klaus D. Witzel wrote:
>
>> You might want to compare:
>>
>> class side>>new
>> 	| instance |
>> 	instance := self new.
>> 	instance thisAndThat "extra code needed".
>> 	^ instance
>>
>> instance side>>initialize
>> 	"sent automatically by Behavior>>new"
>> 	iVar1 := 'text'.
>> 	iVar2 := 0
>>
>> The latter is preferable over the former (less code, less maintenance).  
>> But often people put utility methods like #on:, #with: etc on the class  
>> side, for non-trivial initializations.
>
> When you say "sent automatically by Behavior>>new" is that true? In  
> other words:
>
> x := abitraryObject new.
>
> results in an attempt to call arbitraryObject>>initialize?

Sure. Evaluate "Object halt; new" with doIt and then in the debugger, in  
the DoIt method line push the buttons "Through" then "Into".

>>  From the (re-)usability point of view, if you had getters/setters  
>> (like in traits), the perfect approach is
>> 	x := MyClass new setY: 'text';
>> 		setZ: 0;
>> 		yourself.
>>
>> Or, like I prefer to do it
>> 	(x := MyClass new)
>> 		setY: 'text';
>> 		setZ: 0.
>
> I suppose we don't worry much about the "waste" of, say, setting up some  
> features with default values and then having to discard those when the  
> user sets them to something actually useful?

But yes we care :) The default initializer is Object>>#initialize, an  
empty method with is executed at primitive speed (it just returns self).  
Before that, #basicNew (the primitive) has already initialized the new  
instance with all nil's (or zeros, depending on the class' format spec).  
 From the ~ 2887 classes in my Squeak-dev image, only some 928 implement  
initialize (even less when subtracting all the class side implementors).

So yes, it's quite common behavior to let the user set something actually  
useful.

/Klaus

> 	===Blake===




More information about the Beginners mailing list