Collection ifEmpty:

brad fowlow fowlow at pacbell.net
Wed Mar 21 08:00:54 UTC 2007


Howdy folks.

A bit of collection trivia...

Collection ifEmpty: [ foo ]
returns nil if the collection is not empty,
owing to the placement of the return in

	ifEmpty: aBlock
		"Evaluate the block if I'm empty"
		^ self isEmpty ifTrue: aBlock


It would be a tad less efficient,
but (I think) more useful to say
	ifEmpty: aBlock
		self isEmpty ifTrue: [ ^ aBlock value ]

returning the original collection if non-empty,
... since this allows expressions such as

	foo := (collection allAfterLast:'@') ifEmpty: [collection].

	This will only work if you add a cumbersome ifNotEmpty:[:c|c]
	 to the end, to force the result value to be the non-empty  
allAfterLast:

My Squeak (3.8.something, a Croquet image)
has 18 uses of isEmpty:,  none of them using the result.

Of course it's very unlikely anyone would arrange
a platform change of this sort for such a trivial thing.
But the ifEmpty: methods appear to be of later vintage
than a lot of the core of Collection.

And usually, I find that the methods in the basic system
are well thought out to suit a wide range of use patterns;
this seemed like an odd exception.

So... a question for the tidy expression fans....
what's a nice tidy ordered-collection expression for
	everything after x, unless there is no x, in which case all
since I'm probably just looking into my blind spot,
overlooking something obvious.

Regards,
brad



More information about the Squeak-dev mailing list