본문 바로가기

TIL

모던 자바스크립트 Deep Dive 8장 제어문

제어문 ( 조건문 , 반복문 ) 의 단점 

코드의 흐름을 이해하기 어렵게 만들어 가독성을 해치는 단점이 있다. => 처음 안 사실. 

가독성이 좋지 않은 코드는 오류를 발생시키는 원인이 됨. = > forEach , map , filteh , reduce 같은 고차 함수를 사용한 함수형 프로그래밍 기법에서는 복잡성을 해결하려고 노력한다고 함.


조건문 

if문의 조건식은 불리언 값으로 평가되어야 한다. 따라서 불리언 값이 아닌 값으로 평가되면 자바스크립트 엔진에 의해 암묵적으로 강제 변환되어 평가된다. 이를 암묵적 타입 변환이라고 함. 

 

if ... else 문과 삼항 조건 연산자 

- 조건에 따라 단순히 값을 결정해 변수에 할당하는 경우 삼항 조건 연산자가 가독성이 좋다. 

- 나는 삼항으로 쓸 수 있으면 그렇게 하는 편이 었는데 변수에 할당하는 경우에 가독성이 좋다는 것을 새로 알게 되었다. 

 

default 문에는 break 문을 생략하는 것이 일반적. => default 문은 switch 문의 맨 마지막에 위치하므로 별도의 break 이 필요 없다. 


반복문

자바스크립트는 세 가지 반복문인 for문, while문, do ... while 문을 제공한다. 

( forEach 메서드, for...in문, for...of문은 반복문을 대체할 수 있는 다른 기능들이다. )

 

- for 문은 반복 횟수가 명확할 때 주로 사용하고, while문은 반복 횟수가 불명확할 때 주로 사용함. 

 

break 문 

break문은 레이블 문, 반복문, switch문에서 쓸 수 있다. 

여기서 레이블 문이란 식별자가 붙은 문을 말한다. 

foo : console.log('foo'); 
// foo 라는 식별자가 붙은 레이블 문

break 키워드를 쓰면 이 레이블 문을 탈출 할 수 있다. ( 근데 왜 탈출이라는 단어를 쓰는걸까..?) 

console.log(hello);

foo : {
    console.log(1);
    break foo; //foo 레이블 문을 탈출한다. 
    console.log(2);
}

console.log('Done!');

위같이 중간에 레이블 문 자체를 탈출 할 수 있다. 

 

레이블문은 중첩된 for문 외부로 탈출할 때 유용하다. 무슨 소리일까? 바로 for문이 중첩된 경우에 내부for문에서 외부for문으로 탈출이 아니라 외부for문 밖으로 아예 탈출 할 수 있다는 뜻이다. 

outer: for ( let i =0 ; i < 3 ; i++ ) {
    for ( let j =0 ; j < 3 ; j++) {
        // i + j ===3이면 outer라는 식별자가 붙은 레이블 for문을 탈출한다.
        if ( i+ j ===3 )break outer;
        console.log(`inner[${i},${j}]`);
    }
}

console.log('done!');

레이블 문은 이 경우가 아니고는 일반적으로 권장하지 않는다. 가독성때문인듯.

 

break은 다른 경우에도 반복을 더이상 진행하지 않아도 될 때 불필요한 반복을 회피할 수 있어서 유용하다.