LHJ

I'm a FE developer.

4-4. 문장(Statement) / for, [코딩 시간]

20 Nov 2020 » js_beginner

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
    
    1. var k = 0;
      초깃값 할당, 처음 한 번만 할당합니다.
      초기값이므로 반복을 할 때 매번 설정되지 않는다는 뜻입니다.
    2. k < 2;
      비교 표현식을 평가합니다.
    3. 평가 결과가 true 이면 for() 블록의 코드를 실행합니다.
      k++을 먼저 실행하지 않습니다.
    4. 처음 반복은 k가 0이므로 true 가 되어 블록의 console.log(k) 실행
      블록의 코드리스트 실행이 끝나면 k++ 이 실행됩니다.
      k++ 뒤엔 세미콜론(;)이 생략되었다고 생각하시면 되겠습니다.
    5. k++
      k 변수값을 1 증가시킵니다.
    6. 다시 2번부터 5번까지 실행합니다.
      k가 2가 되면 2번에서 false 가 되며 for() 문을 종료합니다.

for() 옵션

  • 형태 : for (초기값opt; 비교opt; 증감opt) 문장
  • 형태에서 opt는 생략 가능

    • 증감 생략

        for (var k = 0; k < 3;) {
            console.log(k);
            k++;
        }
        // 0
        // 1
        // 2
      
      1. 증감 표현식에 k++ 작성하지 않았으며 블록에서 k 변수값을 증가시킨 형태
        증가시키지 않는다면 위 for 문은 무한반복 할 것입니다.
        세번째 증감opt 를 블록 안에다 작성한 것 뿐입니다.
    • 초기값과 증감 생략

        var k = 0;
        for (; k < 3;) {
            console.log(k);
            k++;
        }
        // 0
        // 1
        // 2
      
      1. for() 문에 초기값을 작성하지 않더라도 ; 은 작성해야 합니다.
      2. 대신 for() 문 앞에서 k 변수에 초기값을 할당했습니다.
      3. 증감 표현식을 작성하지 않고 블록에서 k 변수값을 증가시켰습니다.
    • 비교와 증감 생략

        for (var k = 0; ;) {
            console.log(k);
            k++;
            if (k > 2) {
                // for() 문 종료
                break
            }
        }
        // 0
        // 1
        // 2
      
      1. ; 은 작성해야 합니다.
      2. 비교를 생략했을 때 비교의 default 값은 true 입니다.
      3. 위와 같은 코드 작성법이 좋은건가 라고 생각했을 때 저는 개인적으로 바람직하지 않다고 생각합니다.
        프로그램 코드는 한마디로 표현하면 “Simple is best”입니다.
        그런데 위와 같은 코드는 가독성이 떨어집니다.
        Simple 안에는 가독성과 직관성이 모두 포함되어있습니다.
        그런데 위 코드는 직관적이지도 않고 가독성이 좋지도 않습니다.
    • 모두 생략

        var k = 0;
        for (;;) {
            console.log(k);
            if (k === 2) {
                // for() 문 종료
                break
            }
            k++;
        }
        // 0
        // 1
        // 2
      
      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