32. for, [코딩 시간]
for 문은 앞에서 다뤘던 while 문의 확장입니다.
또한 for 문은 반복의 대명사입니다.
for()
- 형태 : for (초기값opt; 비교opt; 증감opt) 문장
세미콜론을 마지막에 생략한 것을 볼 수 있습니다.
그리고 세가지 모두option
입니다. 작성해도되고 안해도 됩니다. 2번째의 비교 표현식의 평가 결과가 true 인 동안 문장을 반복 실행
따라서 문장에서 비교의 값이false
가 되는 코드가 있어야겠죠?for (var k = 0; k < 2; k++) { console.log(k); } // 0 // 1
- var k = 0;
초깃값 할당, 처음 한 번만 할당합니다.
초기값이므로 반복을 할 때 매번 설정되지 않는다는 뜻입니다. - k < 2;
비교 표현식을 평가합니다. - 평가 결과가 true 이면 for() 블록의 코드를 실행합니다.
k++을 먼저 실행하지 않습니다. - 처음 반복은 k가 0이므로 true 가 되어 블록의 console.log(k) 실행
블록의 코드리스트 실행이 끝나면 k++ 이 실행됩니다.
k++ 뒤엔 세미콜론(;)이 생략되었다고 생각하시면 되겠습니다. - k++
k 변수값을 1 증가시킵니다. - 다시 2번부터 5번까지 실행합니다.
k가 2가 되면 2번에서 false 가 되며 for() 문을 종료합니다.
- var k = 0;
for() 옵션
- 형태 : for (초기값opt; 비교opt; 증감opt) 문장
형태에서 opt는 생략 가능
증감 생략
for (var k = 0; k < 3;) { console.log(k); k++; } // 0 // 1 // 2
- 증감 표현식에 k++ 작성하지 않았으며 블록에서 k 변수값을 증가시킨 형태
증가시키지 않는다면 위 for 문은 무한반복 할 것입니다.
세번째 증감opt 를 블록 안에다 작성한 것 뿐입니다.
- 증감 표현식에 k++ 작성하지 않았으며 블록에서 k 변수값을 증가시킨 형태
초기값과 증감 생략
var k = 0; for (; k < 3;) { console.log(k); k++; } // 0 // 1 // 2
- for() 문에 초기값을 작성하지 않더라도 ; 은 작성해야 합니다.
- 대신 for() 문 앞에서 k 변수에 초기값을 할당했습니다.
- 증감 표현식을 작성하지 않고 블록에서 k 변수값을 증가시켰습니다.
비교와 증감 생략
for (var k = 0; ;) { console.log(k); k++; if (k > 2) { // for() 문 종료 break } } // 0 // 1 // 2
- ; 은 작성해야 합니다.
- 비교를 생략했을 때 비교의 default 값은 true 입니다.
- 위와 같은 코드 작성법이 좋은건가 라고 생각했을 때 저는 개인적으로 바람직하지 않다고 생각합니다.
프로그램 코드는 한마디로 표현하면 “Simple is best”입니다.
그런데 위와 같은 코드는 가독성이 떨어집니다.
Simple 안에는 가독성과 직관성이 모두 포함되어있습니다.
그런데 위 코드는 직관적이지도 않고 가독성이 좋지도 않습니다.
모두 생략
var k = 0; for (;;) { console.log(k); if (k === 2) { // for() 문 종료 break } k++; } // 0 // 1 // 2
- ; 은 작성해야 합니다.
- 위 코드도 설명을 위해 작성한 것이지 좋은 모습은 아닙니다.
아까 말했듯이 직관성, 가독성 모두 떨어지기 때문입니다.
코딩 시간
for() 문을 사용하여
- 1에서 50까지 반복하면서
- 홀수 번째 값과
- 짝수 번째 값을 누적하고
- 반복한 값을 누적합니다.
반복을 완료하면
- 누적한 홀수 번째 값과
- 누적한 짝수 번째 값을 출력합니다.
- 누적한 전체 값을 출력합니다.
var odd = 0;
var even = 0;
for (var i = 1; i < 51; i++) {
if (i % 2 === 1) {
odd += i;
} else {
even += i;
}
}
console.log(odd); // 625
console.log(even); // 650
console.log(odd + even); // 1275