配列はUWSCから大きく変わった機能の一つです。
UWSCにおける配列は
- 一つの変数に束縛される
- 他の変数に代入できない
- 通常の方法では関数の引数として渡せない
- 関数の戻り値にできない
など、配列だけの特殊な制限が存在していました。この仕様はなにかと不便でコーディングの幅を狭めていたと思います。後にSafeArrayが登場し不便さが多少緩和されましたがそれも組み込み関数を呼ぶ必要があったためやや面倒でした。
UWSCRでは配列を値型の一つとし、上記の制限を撤廃しています。
配列リテラル
UWSCRでは配列のリテラル表記を実装しています。
a = [1, 2, 3]
print a[1] // 2
// 配列そのものもprintできる
print a // [1, 2, 3]
// 配列のコピーを作る
b = a
print b // [1, 2, 3]
// 配列リテラルを直接インデックスする
print [4, 5, 6][0] // 4
// for-inループ
for n in [7, 8, 9]
print n
next
// 7
// 8
// 9
UWSCと同じ構文による宣言および初期化も可能です。
// UWSC互換の変数初期化
dim a[] = 1, 2, 3
// やってることは以下と同じ
// dim a = [1, 2, 3]
// 代入もできる
b = a
print b // [1, 2, 3]
多次元配列
通常の配列と同様に、UWSC方式の初期化もリテラル表記も可能です。
dim a[][1] = 1,2,3,4,5,6
print a // [[1, 2], [3, 4], [5, 6]]
print a[1][1] // 4
b = [[1,2],[3,4],[5,6]]
print b // [[1, 2], [3, 4], [5, 6]]
print b[1][1] // 4
+演算子による配列要素の追加
配列 + 値
で配列に要素を追加できます。
print [1, 2, 3] + 4 // [1, 2, 3, 4]
a = [5, 6, 7]
a += 8
print a // [5, 6, 7, 8]
関数の引数や戻り値としての配列
UWSCでは引数として配列を受ける場合は引数名[]
で受ける必要がありましたが、UWSCRでは通常の引数でも配列を受けられます。また戻り値として配列を返すこともできます。
function f(arr, n)
arr += n
result = arr
fend
a = [1, 2, 3]
print f(a, 4) // [1, 2, 3, 4]