0 or 1 index (was: new Smalltalk programmer's thoughts)

Jecel Assumpcao Jr jecel at merlintec.com
Mon May 1 13:41:31 UTC 2006

Wolfgang Helbig wrote on Mon, 1 May 2006 14:02:19 +0200 (MEST)
> And that is my point: Different challenges need different numbers for the first 
> index. When I am implementing a Gaussian algorithm to invert matrices, I'd never
> use 0 as the first index. But whenever I am computing indexes, I'd never use
> one as the first index. And this is not supported by BASIC and Smalltalk.

To be fair, I have used more than one BASIC that allowed you to set
either 0 or 1 as the base index for all arrays in a program. And the
Self dialect of Smalltalk (http://www.merlintec.com:8080/Self/) does
borrow several C conventions including 0 based arrays.

The current program I am writing in Squeak simulates hardware and 1
based arrays were a bit inconvenient, so the first thing I did was
define a ZArray class as a subclass of ArrayedCollection with

at: index
  ^ super at: index + 1

at: index put: obj
  ^ super at: index + 1 put: obj

do: block
   0 to: self size - 1 do:
         [ :index | block value: (self at: index) ]

and then all I had to do was write the rest of my application naturally
and just remember to use "ZArray new: x" instead of "Array new: x".
Inspecting ZArrays still shows the contents as having indexes starting
with 1, but other than that small confusion (which I could easily fix if
I wanted to) it works just great. There is probably a significant
performance hit but I am not worried about that here.

-- Jecel

More information about the Squeak-dev mailing list