10.2.1 Array
10.2.1 Array
Array는 요소들의 컬렉션입니다. 이 요소들의 타입에 대응하는 타입 매개변수를 하나 가집니다. Array는 세 가지 방법으로 만들 수 있습니다:
- 생성자 사용:
new Array() - 배열 선언 구문 사용:
[1, 2, 3] - 배열 컴프리헨션(array comprehension) 사용:
[for (i in 0...10) if (i % 2 == 0) i]
Array는 대부분의 사용 사례를 다루는 API를 제공합니다. 또한 읽기와 쓰기 배열 접근(array access)을 허용합니다:
class Main {
static public function main() {
var a = [1, 2, 3];
trace(a[1]); // 2
a[1] = 1;
trace(a[1]); // 1
}
}
Haxe의 배열 접근은 경계가 없으므로, 즉 예외를 던지지 않는 것이 보장되므로, 추가 논의가 필요합니다:
- 존재하지 않는 인덱스에 읽기 접근을 하면 타깃 의존적인 값이 반환됩니다.
- 양수 인덱스로 경계 밖 쓰기 접근을 하면, 마지막 정의 인덱스와 새로 쓰인 인덱스 사이의 모든 위치에
null(또는 정적 타깃에서 기본 타입의 기본값)이 삽입됩니다. - 음수 인덱스로 쓰기 접근을 하면 결과는 지정되지 않습니다.
Array는 요소들에 대한 반복자(iterator)를 정의합니다. 이 반복은 일반적으로 컴파일러가 배열 인덱스를 사용하는 while 루프로 최적화합니다:
class Main {
static public function main() {
var scores = [110, 170, 35];
var sum = 0;
for (score in scores) {
sum += score;
}
trace(sum); // 315
}
}
Haxe는 이 최적화된 JavaScript 출력을 생성합니다:
Main.main = function() {
var scores = [110,170,35];
var sum = 0;
var _g = 0;
while(_g < scores.length) {
var score = scores[_g];
++_g;
sum += score;
}
console.log(sum);
};
매개변수 타입이 Dynamic으로 강제되지 않는 한 Haxe는 혼합 타입의 배열을 허용하지 않습니다:
class Main {
static public function main() {
// 컴파일 오류: 혼합 타입 배열은 타입이 Array<Dynamic>으로 강제된 경우에만 허용됨
// var myArray = [10, "Bob", false];
// 혼합 타입을 가진 배열
var myExplicitArray:Array<Dynamic> = [10, "Sally", true];
}
}
참고: 동적 배열(Dynamic Arrays)
Haxe 2에서는 혼합 타입 배열 선언이 허용되었습니다. Haxe 3에서는 명시적으로 Array<Dynamic>으로 선언된 경우에만 배열이 혼합 타입을 가질 수 있습니다.
관련 내용
메서드에 대한 자세한 내용은 Array API를 참조하세요.
Haxe Code Cookbook의 데이터 구조 자습서와 예제.
출처: Array