관리 메뉴

nkdk의 세상

AS3.0의 반복문 본문

My Programing/ActionScript

AS3.0의 반복문

nkdk 2008. 3. 9. 22:19
자바랑 너무 똑같기 때문에 소스만 나갑니다.

for (var iVar3=0; iVar3 < 100; ++iVar3) {
trace(iVar3);
}

100% 똑같네요 --

그리고 for문을 사용할때 주의 할 점이 있습니다. 메모리에 작게 먹는 변수를
선언해서 그 변수에 값을 쌓아서 큰 곳에서 넣으라는 것입니다.
가령 예를 들면

var textArea:TextArea = new TextArea; // 텍스트 지역 영역
var sVar:String-"";
for(var ivar4 = 0; iVar4 < 100; ++iVar4) {
sVar = sVar + iVar4.toString()+"\n";
}
textArea.text=sVar; // 다음과 같이 넣으라는 이야기 입니다.

물론 textArea.text의 내용에서 + 시켜도 되겠지만.. 속도 상으로 큰 차이가 납니다. 메모리 먹는 것도 그렇고요. ^^ 이 점만 지키셔서 스크립터 하시면 되세요.^^

자 그럼 속도 차이를 확인해 보고 싶으신가요?

var m1:Date = new Date();
테스트할 제어문을 여기에 넣으시고
var m2:Date = new Date();
trace(m2.getTime() - m1.getTime());

자 서로 빼서 값이 나올겁니다. ^^

참 그리고 여태 몰랐던 사실 ++iVar4가 iVar4++ 보다 약 2배 정도 속도가 빠르다는 사실 습관적으로 앞에 ++iVar4 를 써주는 것을 추천하네요.

++iVar4 의 흐름
iVar = iVar+1;
return iVar;

iVar++ 의 흐름
var tempVar:int = iVar4;
iVar4 = iVar4+1;
return tempVar;

자 여기서 팁 하나 나아 갑니다.

textArea 에서 그냥 += 해서 넣는 방법 보다 잠깐 해당 Area의 visible을 false 시키고 textArea에는 appendText라는 메서드를 지원하기 때문에 그것을 사용합니다. 그 후에 visible을 true 시킵니다. 8배 이상의 속도 향상이 됩니다. ^^

반복문에서 사용되는 이상적인 것중에 하나가 java1.5 에서 나왔죠.
연속 데이터가 있을 경우 편하게 사용되게 하는 for문 인데 as3.0에도 이와 동일한게 있군요. for .. in 반복문이라고 합니다.

특수한 경우 다루는 대상이 연속 데이터인 경우

Ex1:
var arVar:Array = ["one", "two", "three"];
var i:String;
for (i in arVar) {
trace(i, arVar[i]);
}

Ex2:
var obVar:object = {x:20, y:30};
var j:String;
for (j in obVar) {
trace(j, obVar[j]);
}

Ex3:

var myXML:XML =
<fname>Jane</fname>
<fname>Tazan</fname>
<fname>NamKung</fname>


var p:String;
for(p in myXML.fname) {
trace(p, myXML.fname[p]);
}

다음과 같이 Object, Array, XML같은 연속데이터가 가능하네요.
아 그리고 이게 약간 메모리 상으로 속도 차이로 효율성 좋은 것이
for each(sVar in myXML.fname)
{
trace(sVar);
}

과 같이 써주세요. for in 과 약간 다르지만.. 비슷합니다. :)메모리 상의 문제이기 때문에 생략 ^^

do, while, break, continue
___________________

with 문을 이용하여 반복문과 같이 쓰면 효율적입니다.

예제:

var sum1:Number = 0;
var sum2:Number = 0;
var sum3:Number = 0;
var sumsum:Number = 0;
with (Math) {
for(var i=0;i<500;++i) {
sum1 = 3.14 * pow(30,2);
sum2 = 20 * cos(3.14);
sum3 = 20 * sin(3.14 / 2);
sumsum += sum1 + sum2+ sum3;
}
}
trace(sumsum);
}

이렇게 with를 사용해서 지정한 객체 위치를 미리 기억함으로
실행속도를 올립니다. 물론 math 가 사용되어야 pow, cos, sin 같은 처리를 할 수 있습니다.

자 다음은 if문 뭐 이것도 말할 것도 없이 자바랑 비슷하겠죠 ^_^ 갑니다.