Some Self ideas
Matthew S. Davis
mdavis at cse.psu.edu
Thu Jan 18 14:37:55 UTC 2001
Hi Diego (and everyone else),
I just wanted to give you one reason why I think Richard has
suggested that the Object>>value idea won't work. The reason that
ifTrue:ifFalse: uses blocks is because blocks delay execution. In other
words, you want ifTrue:ifFalse: to only execute one of the possibilities
and not both. Using a block is a great way to delay their execution
because the block waits until the value message is sent before it executes
the code inside of it.
Here's a "tangible" example. Suppose that you have two
instances, a and b, of a class that answers to a message called
incrementValue. What the incrementValue method actually does is to
increment some instance variable by some amount. If we implement the
suggestion and then write
cond ifTrue: a incrementValue ifFalse: b incrementValue.
then we will not get the behavior that we want. In this case, both a and
b end up executing their incrementValue methods regardless of the
condition because we have not delayed their execution. However,
cond ifTrue: [ a incrementValue ] ifFalse: [ b incrementValue ].
works great since we don't execute both possibilities.
-Hank
On Thu, 18 Jan 2001, Richard A. O'Keefe wrote:
> Diego Gomez Deck <DiegoGomezDeck at ConsultAr.com> suggested:
> Object>>value
> ^ self
>
> Please, don't anybody do this. It seems quite common for beginners,
> used to other languages, to write
> cond ifTrue: exp1 ifFalse: exp2
> when they really mean
> cond ifTrue: [exp1] ifFalse: [exp2].
>
> The sooner this is rejected, the sooner they understand how ifTrue:ifFalse:
> is supposed to work.
>
> The other message is:
>
> Object>>, anObject
> ^ OrderedCollection with:self with:anObject
>
> IMHO, it is helpful if each message means one thing.
> If "a , b" always means "make a new sequence with the elements of a followed
> by the elements of b", I can cope. But if it means "make a new sequence
> (either with a as an element or the elements of a as elements) followed by
> the elements of b", I'll get lost. The more complicated the description
> of a method, the harder it is to use.
>
>
>
More information about the Squeak-dev
mailing list
|