December 4, 2022

The Protocol of Array


By referencing an array with a variable, say baconArray, and evaluating the following expression, an array of sufficient size to store 5 objects is instantiated.

baconArray := Array new: 5

The array's size can be confirmed with

baconArray size

This returns 5

At this stage all the stored elements reference nil.

1 2 3 4 5
nil nil nil nil nil


The next expressions add elements to the array.
fbaconDictionary has already been created, setOfPubs and birthDate are instantiated as follows:

setOfPubs := Set new.
setOfPubs add: 'French House';
          add: 'Colony Room';
          add: 'Dog and Duck'.

birthDate := Date newDay: 28 month: #October year: 1909.

baconArray at: 1 put: 'Francis Bacon';
           at: 2 put: fbaconDictionary;
           at: 3 put: setOfPubs;
           at: 4 put: birthDate;
           at: 5 put: 666

1 2 3 4 5
'Francis Bacon' fbaconDictionary setOfPubs birthDate 666


However, if evaluated, the following code would throw an exception.

baconArray at: 6 put: 'George'

An array is fixed size; it cannot be extended. The argument to at: must lie within the range of indexes that have been created. Furthermore, one cannot shrink an array by using remove:, but one can replace an element with another object. For example:

baconArray at: 1 put: 'The Old Devil'

replaces the string at index 1 with 'The Old Devil'. The message answer is the argument supplied to put:

baconArray includes: 'Francis Bacon'

returns true

baconArray isEmpty

returns false. Similarly

newArray := Array new: 10.
newArray isEmpty

returns false. The isEmpty message sends a size message that implements a check on the number of indexable fields in the receiver. In this case the size message produces an answer of 10 and consequently the isEmpty message produces a false message answer. Only when the number of stored elements equals 0 is true returned.

baconArray at: 3

returns setOfPubs, the textual representation of which is

Set('Dog and Duck' 'Colony Room' 'French House')

The indexOf: selector can be used like this:

baconArray indexOf: setOfPubs

and returns 3

The message selector to:do: in the protocol of Number can be used to initialise an array, as illustrated in the next scenario.

Next page » A scenario illustrating the use of Array

Previous page « Array
































































Up to top of page