Statements: array

Declares a local array. Local arrays and variables allow you to store intermediate results during the evaluation of expressions.

Syntax

arraytype‑expressionarray‑name[array‑size];

Discussion

The declaration determines the name of the new array, the data type of values the array can store at the runtime and the size (the capacity expressed in the maximum number of elements) of the array. Just after declaring, the local arrays are considered as being initialized implicitly with its data type specific zero values (an empty string "", an empty set [], a transparent color #00000000, boolean value false or even the number 0). As such it is legal to evaluate a non-explicitly initialized array elements. For example:

array string text1[3];
array string text2[3];

// Initialize the array
text1[0] = "Hello";
text1[1] = "Bonjour";
text1[2] = "Hola";

// Read the value of the array
var string result = text1[2];     // result = "Hola"

// Modify the Variable
text1[2] = text1[2] + " mundo";   // text1[2] = "Hola mundo"

// Trying to read a non-explicitly initialized array element 
// results in the respective zero value
var string result = text2[2];     // result = ""

The actual size of an array results from the array-size operand. In its simplest form, the operand consists of a single unsigned integer literal. Thus declared arrays are considered as one-dimensional. In turn, multidimensional arrays are declared with the array-size operand containing several unsigned integer literals (one for every array dimension) separated by the , comma sign. To evaluate the actual size of an already declared array use the size instant property. For example:

array string text1[ 16 ];   // One-dimensional array
array string text2[ 2, 3 ]; // Multidimensional array with 2 x 3 = 6 elements
var   int32  i;

// Initialize all elements of the one-dimensional array
for ( i = 0; i < text1.size; i = i + 1 )
  text1[ i ] = "";

// Initialize a multidimensional array
text2[0,0] = "Hello";
text2[0,1] = "Bonjour";
text2[0,2] = "Hola";
text2[1,0] = " world";
text2[1,1] = " monde";
text2[1,2] = " mundo";

// Read the value of the array
var string result = text2[0,1] + text2[1,1];  // result = "Bonjour monde"

Please note, Chora expects the size of an array to be well known at the compilation time and immutable at the runtime. Using variable expressions in the array-size operand is thus not allowed:

var int32    a = 10;
array string text3[ a ];    // The size is not a constant value. Chora error

The array statement can occur everywhere within the method or within a nested block statement wherever regular statements are allowed. The blocks serve as individual scopes for all enclosed local arrays and variables. In other words, the arrays are valid within the respective block only. Outside the block, these definitions are not available and their contents are lost. For example:

if ( operand1 )
{
  // Following arrays are valid within this block only
  array rect   arr1[2];
  array string arr2[2];

  arr1[0] = SomeTextView1.Bounds;
  arr1[1] = SomeTextView2.Bounds;
  arr2[0] = SomeTextView1.String;
  arr2[1] = SomeTextView2.String;

  [ ... ]
}

array rect   arr1[2];
array string arr2[2];

arr1[0] = OtherTextView1.Bounds;
arr1[1] = OtherTextView2.Bounds;
arr2[0] = OtherTextView1.String;
arr2[1] = OtherTextView2.String;

[ ... ]