Variabili scalari e di array

Nella maggior parte dei casi, una volta dichiarata una variabile, sarà sufficiente assegnarvi un unico valore. Una variabile contenente un singolo valore è una variabile scalare. Negli altri casi, a una variabile conviene assegnare più di un valore correlato. È possibile creare una variabile che possa contenere una serie di valori. Questo tipo è definito variabile di array. Le variabili di array e le variabili scalari vengono dichiarate allo stesso modo, tranne per il fatto che la dichiarazione di una variabile di array utilizza le parentesi ( ) dopo il nome della variabile.

Nell'esempio seguente viene dichiarato un array a dimensione singola contenente 11 elementi.

Dim A(10)

Anche se il numero riportato tra parentesi è 10, tutti gli array in BSL sono su base zero. Pertanto, questo array contiene 11 elementi. In un array su base zero, il numero di elementi dell'array corrisponde sempre il numero visualizzato tra parentesi più uno. Questo tipo di array è denominato array a dimensione fissa.

È possibile assegnare dati a ciascuno degli elementi dell'array utilizzando un indice. Partendo da zero e fino a 10, i dati possono essere assegnati agli elementi di un array nel modo indicato di seguito.

     A(0) = 256
        A(1) = 324
        A(2) = 100
         . . .
        A(10) = 55

In modo analogo, i dati possono essere recuperati da qualsiasi elemento utilizzando un indice nell'elemento desiderato dell'array.

Ad esempio:

SomeVariable = A(8)

Gli array non sono limitati a un'unica dimensione. È possibile dichiarare più dimensioni separando i numeri di dimensione di un array tra parentesi con virgole. Nell'esempio seguente, la variabile MyTable è un array bidimensionale costituito da 6 righe e 11 colonne.

Dim MyTable(5,10)

In un array bidimensionale, il primo numero è sempre il numero di righe; il secondo numero è il numero di colonne.

È inoltre possibile dichiarare un array la cui dimensione cambia durante l'esecuzione dello script. Questo tipo di array è denominato array dinamico. L'array viene inizialmente dichiarato all'interno di una routine utilizzando l'istruzione Dim o ReDim. Tuttavia, per un array dinamico, l'ordine di grandezza o il numero di dimensioni non vengono posizionati all'interno delle parentesi.

Ad esempio:

Dim MyArray()
ReDim AnotherArray() ' Illegal as no dimension specified
ReDim AnotherArray(3)

Per utilizzare un array dinamico, è necessario utilizzare ReDim per determinare il numero di dimensioni e l'ordine di grandezza di ogni dimensione. Nell'esempio seguente, ReDim imposta la dimensione iniziale dell'array dinamico su 25. Una successiva istruzione ReDim ridimensiona l'array su 30, ma utilizza la parola chiave Preserve per conservare il contenuto dell'array durante il ridimensionamento.

ReDim MyArray(25)
 . . . 
ReDim Preserve MyArray(30)

Non esiste alcun limite al numero di volte in cui è possibile ridimensionare un array dinamico. Se si riduce la dimensione di un array, si perderanno i dati degli elementi eliminati.

Negli esempi seguenti viene illustrato l'uso delle variabili scalari e di array.

Esempio 1

Dim B
B = 200   ' Assigns the value 200 to the variable B.

Esempio 2

Dim A(3)   ' Declares a single-dimension array with 4 elements 0 to 3 indexes.
' Assigning values to each element of the array.
A(0) = 256
A(1) = 324
A(2) = 100
' Retrieving a value from the array.
Dim SomeVariable
SomeVariable = A(1)   ' Retrieves the value at index 1.

Esempio 3

Dim MyArray()   ' Declares a dynamic array.
ReDim MyArray(25)   ' Sets the initial size of the dynamic array to 25 elements.
' Assigning values to the dynamic array.
MyArray(0) = "First"
MyArray(25) = "Last"
' Resizing the dynamic array and preserving contents.
ReDim Preserve MyArray(30)   ' Resizes the array to 30 elements and preserves existing data.

Esempio 4

Dim AnotherArray()
ReDim AnotherArray(10)   ' Initial size of 10 elements.
' Assigning values to the array.
AnotherArray(0) = "Alpha"
AnotherArray(10) = "Omega"

' Resizing the array multiple times.
ReDim Preserve AnotherArray(20)
AnotherArray(20) = "NewElement"
ReDim Preserve AnotherArray(5)   ' Reduces the size of the array (data beyond index 5 is lost).