이전글: [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