About Smalltalk at: .... ifAbsent:/present:

Colin Putney cputney at wiresong.ca
Tue Nov 30 13:15:32 UTC 2004


Andreas had this to say about testing for the presence of a class:

>> It seems that:
>> - first it would be better to let the compiler compiles method with 
>> reference to classes that are not in the system and let the system 
>> complain at execution tim (marcus suggestion and he can explain that 
>> much better than me).
> 
> 
> I doubt this. Yes, all of these could be re-written as, say:
> 
>    Foo ifNil:[self mumble].
>    Foo ifNotNil:[Foo bar].
> 
> instead of
> 
>    Smalltalk at: #Foo ifAbsent:[self mumble]
>    Smalltalk at: #Foo ifPresent:[:foo| foo bar].
> 
> but the main point is that the latter two are very verbose in conveying 
> the intention that "yes, the caller is very well aware that Foo may be 
> absent and that the dependency is a weak one". If you know how to read 
> to the first one the same may be true but the latter is just simply 
> obvious in this regard.

You know, neither of these is really very satisfying. The first is
ambiguous. There are any number of reasons why Foo could be nil, and a 
weak dependency is only one of them. My problem with the second one 
isn't so much the verbosity, it's that it also says "yes, the caller is 
well aware that class lookups go through a single global dictionary 
called Smalltalk." That is, it knows too much about the implementation 
of the compiler and runtime.

I think it would be nice to have something like this:

     Foo
         ifPresent: [:foo | foo bar]
	ifAbsent: [self mumble]

This idiom clearly says what it means, "the dependency is a weak one" 
without saying more than that.

Colin



More information about the Squeak-dev mailing list