HOM - Higher Order Messages
Chris Patrick Schreiner
chris.schreiner at online.no
Thu Apr 20 12:58:30 UTC 2006
That was a lot clearer! Thanks...
chrisp
Den Apr 20, 2006 kl. 2:50 PM skrev Jon Hylands:
> On Thu, 20 Apr 2006 07:40:39 +0200, "Klaus D. Witzel"
> <klaus.witzel at cobss.com> wrote:
>
>> newArray #at: eachOf: (1 to: n) #put:
>> withEach: oldArray onlyIf: [:index :element | element notNil]
>
> This is supposed to be more readable (and higher-order) than normal
> Smalltalk syntax?
>
> newArray := oldArray select: [:each | each notNil]
>
> Personally, I think the main thing driving stuff like this must be
> that
> people can't remember how #inject:into: works.
>
> Many many years ago, Kent Beck proposed the following rules for
> collection
> interation, and I have used these rules faithfully since:
>
> - the iteration variable is always called 'each'. You can add to
> that, so
> it is 'eachItem' or 'eachName' or 'eachClass' or whatever.
>
> - for #inject:into:, the block arguments are always sum and each,
> in that
> order.
>
> #(1 2 3) inject: 0 into: [:sum :each | sum + each].
> #(1 2 3)
> inject: Dictionary new
> into: [:sum :each |
> sum
> at: each put: 'Number ', each printString;
> yourself].
>
> I never have to look up #inject:into to remember, because I just
> remember
> that the arguments are sum and each, and the rest is obvious.
>
> It seems like this (HOM) is a solution for a simple language, where
> you
> can't do anything complicated. Blocks in Smalltalk can have
> arbitrary code,
> and I very often use them that way when combined with the specialized
> collection iterators.
>
> Later,
> Jon
> --------------------------------------------------------------
> Jon Hylands Jon at huv.com http://www.huv.com/jon
>
> Project: Micro Seeker (Micro Autonomous Underwater Vehicle)
> http://www.huv.com
>
>
More information about the Squeak-dev
mailing list
|