[ANSI-Smalltalk] Re: A list of interesting methods, ifNotNil:
John O'Keefe
wembley.instantiations at gmail.com
Thu Sep 4 11:04:10 BST 2008
I think the 'where do you stop' question is easily answered. You stop when
you can't achieve agreement.
I think we are quite close to agreement in ifNil: and ifNotNil: and far from
agreement on other if.. and ifNot... constructs. Further, ifNotNil: with a
monadic block as its argument does provide a unique 'convenience' function
that has been discussed previously.
I can see similar value in a whileNotNil: message (with a monadic block),
but I think added this construct likely falls on the far side of the 'where
do you stop' line -- at least right now.
I also agree that is... (as in isEmpty) should be the standard pattern for
messages that answer a boolean while if... (as in ifNil: []) should be the
standard pattern for messaged that evaluate a block based on a boolean.
John O'Keefe [|], Principal Smalltalk Architect, Instantiations Inc.
On Wed, Sep 3, 2008 at 9:57 PM, Richard A. O'Keefe <ok at cs.otago.ac.nz>wrote:
>
> "Jim" ( jas at cruzio.com ) wrote that he preferred
>
> isNil: a0block
> notNil: a0block
> nonNil: a1block
> and various combinations of those to the by now traditional
> [ifNil:][ifNotNil:]
>
> As a Smalltalk user, it's quite important to me that methods
> taking a block that might or might not be evaluated have
> "if" in the keyword selector for that block.
>
> For example, it's
> aCollection at: someKey ifAbsent: exceptionBlock
> ^^
> ifAbsent:, not isAbsent:, notPresent:, nonPresent:, or
> anything else.
>
> There seem to be three reasons for leaving [ifNil:][ifNotNil:]
> out:
> (1) No agreement about the optional argument in the not-nil
> block; of course the standard could cover just the no-
> argument case.
> (2) These methods aren't really necessary unless you have
> redefined what nil == ... does. A compiler can turn
> nil == (expr) ifTrue: b1 ifFalse: b2
> into whatever
> (expr) ifNil: b1 ifNotNil: b2
> does.
> (3) Where do you stop? Once you have these, why not
> b1 while[Not]Nil[: b2]? Why not ifEmpty:ifNotEmpty:?
> This is actually a serious question; I've wanted
> b1 whileNotNil: b2 often enough.
>
> On the other hand, the feature is widely available, and is
> quite intention-revealing, so the answer to (3) is "because
> these methods _are_ common practice and those aren't."
> --
> If stupidity were a crime, who'd 'scape hanging?
>
>
>
>
>
>
>
>
> _______________________________________________
> ANSI-Smalltalk mailing list
> ANSI-Smalltalk at lists.openskills.org
> http://lists.openskills.org/cgi-bin/mailman/listinfo/ansi-smalltalk
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.openskills.org/pipermail/ansi-smalltalk/attachments/20080904/58a29f80/attachment.htm
More information about the ANSI-Smalltalk
mailing list