Unary - Binary message

Richard A. O'Keefe ok at atlas.otago.ac.nz
Thu Oct 25 05:13:39 UTC 2001


"Gary McGovern" <garywork at lineone.net> wrote:
    [Alan Key wrote:
	A way around this is to make a class to hold numbers that can be
	incremented (we used to call this a "gauge").  If you stick one
	of these in a variable slot, then all will work pretty well.
	Can you see where you should subclass gauge?
    ]
	My guess would be make an IntegerArray with the index changing on
	incrementing. Close ?
	
Perhaps a simpler example is a Counter.

Create a new subclass Counter of Object with one instance variable 'value'.
Give it the methods

    value                         "access method"
	value ifNil: [value := 0] "lazy initialisation to 0".
	^value
	
    increment                     "bump value, return self"
        value := self value + 1

    decrementIfPositive
        value > 0 ifTrue: [value := self value - 1]

    isZero
        ^self value = 0

Now you can do
    |c|
    c := Counter new.
    c value				"==> 0"
    c isZero				"==> true"
    c increment.
    c isZero				"==> false"
    c decrementIfPositive.
    c decrementIfPositive.
    c value				"==> 0"

You don't want a counter that clamps at 0?  Then roll your own.
(Note that ++ in C++ and C99 will clamp for one type but not others.)
You want a method to set a counter to any number?  Add one.





More information about the Squeak-dev mailing list