이전글: [twee 기본] 3. 조건문 / 다음글: [twee 기본] 5. 함수



프로그램을 프로그램답게 만드는 요소 2


twee에서는 반목문이 for밖에 없음. 얘만 신경쓰면 돼.




1.for

for문의 양식은 3가지가 있음.

1. <<for [조건]>>

2. <<for [초기자]; [조건]; [후처리]>>

3. <<for [키 변수], 값변수 range 대상객체>>
( []로 둘러싸인 것들은 '선택'해서 사용할 수 있음.)

1,2번은 금방 이해할건데, 3번은 약간 복잡함.


1)<<for [조건]>> 

조건에 성립하면 계속 반복함. 가장 간단한 형태.

$a 에 0을 대입함
@$a가 5보다 작으면 반복문이 계속 진행됨.
- $a를 출력함
- $a를 1 올림
# 반복문 종료
이런 코드야.
그럼, 결과는 어떻게 될까?


0부터 시작해서, 출력을 하고 1씩 더하니까0, 1, 2, 3, 4

5는 출력하지 않는 이유는

4출력 - 4에 1을 더함($a는 5가 됨) - 조건 검사($a가 5니까 false) - 조건 빠져나옴.

그래서 5는 출력되지 않는거야.


만약 $a++를 하지 않았다면 어떻게 될까?

프로그램 처음 개발하면 이게 제일 무서울 듯.
조건을 빠저나갈 수 없게 되니까, 무한 반복하다가 오류 발생하고 종료됨.
오류 설명 굳이 하자면, 한계치인 1000번 루프를 반복해서 오류가 난거야.
twee는 기본 설정으로 루프 최대치가 1000번이거든. 그 이상으로 반복되면 오류가 발생해.



아까 조건문 설명할 때 [조건]이건 선택이라고 했었어.

그럼 생략하면 어떻게 사용할까?

빠져나갈 조건을 루프 안에 넣어줘야 해.
<<run console.log()>> 이건 화면이 아니라, 콘솔을 통해서 알려주는 기능이니까 별로 신경쓰지 마.

<<break>>는 루프를 진행하다가 만나면 루프를 즉시 탈출하는 매크로야.
for 안에 있던 조건을 밖으로 꺼내고, <<break>>를 통해 루프를 종료하면 아까 했던 for문이랑 똑같은 뜻인거야.

이렇게 결과는 같아.



2) <<for [초기자]; [조건]; [후처리]>>

for문의 가장 기본적인 형태

$a라는 변수를 만듦 - ( 조건 검사 - 내용 실행  - $a에 1을 더함 ) - ( 조건 검사 - 내용실행 - $a에 1을 더함) - ...
이런 식으로 반복되는 조건문.
초기자에는 루프가 처음 시작할 때 진행하는 명령문, 후처리에는 루프가 한번 끝날 때마다 실행하는 명령문을 넣어.
이 두개 외에는 1)하고 차이 없음


결과도 같음

물론 생략한다면, 그에 따라서 부족한건 자기가 직접 만들어야 해.
초기자에서 변수 선언을 안했으면 루프 밖에서 변수선언,

조건을 안정했으면, 루프 안에서 조건 설정 및 <<break>> 넣기,

후처리를 안했으면 루프 마지막에 후처리.




3) <<for [키 변수], 값변수 range 대상객체>>

이걸 하기 전에 객체 대해서 알아야 함.

근데 그걸 지금 알려주면 혼란스러울거니까, 배열로 간략하게 알려줄게.
자료형에 대한건 [twee 기본] 1. 변수와 자료형에서 언급했어. 자세한건 찾아봐.



일단 [키 변수]는 생략하고, <<for 값변수 range 대상객체>>만 써보자.

range는 객체로 루프 돌리겠다고 알려주는 의미니까, 중요한 뜻은 없어.

값 변수에 _name이라는 변수를 넣고, 대상객체에는 $fruite라는 배열을 넣었어.

어떻게 이런 결과가 나왔을까?

for - range는 객체의 값들을 대상으로 반복을 해.

한번 루프를 돌기 시작할 때, 값 변수에 객체의 값을 하나씩 대입해 줘.
그래서 _name에는 첫 루프에 "사과", 두번째 루프에 "바나나" ... 이렇게 대입이 되는거야.


이번에는 저 상태에서 키 변수도 만들어서 넣어보자.

이제 이정도는 분석할 수 있지?

key변수에 _index를 넣고 돌렸더니, 루프가 돌때마다 0부터 1씩 올라가고 있어.

배열을 for - range로 돌리면 키 변수에는 인덱스가, 값 변수에는 배열의 값이 하나씩 들어가는걸 알 수 있겠지?

정확한거는 이렇게임. json도 비슷하게 key를 키변수에, value를 값 변수에 하나씩 넣고 루프 진행함.




2. <<break>>

아까도 사용했지만 다시 설명하자면, 이 매크로가 실행되면 바로 루프를 탈출해.

쓰는 법은 보여줬으니까 넘어갈게.



3. <<continue>>

이 매크로가 실행되면 즉시 현재 루프를 중단하고 다음 루프를 시작해.

바로 보여주는게 빠를 것 같아.

조건문으로 $a가 짝수일 경우 continue를 실행시키도록 했어.

짝수가 될 때마다 바로 넘어가서, print문이 실행이 안된 모습이야.

어떻게 쓰는지 알겠지?





참고


콘솔에 하나씩 테스트 해보면 어떻게 구분되는지 알 수 있음

a는 배열, b는 json