제어문(contorol flow statement)은
코드는 위에서 아래로 순차적으로 실행하는데,
forEach
, map
, filter
, reduce
같은 고차 함수를 사용한 함수형 프로그래밍 기법에서는 제어문의 사용을 억제하여 복잡성을 해결하려고 노력한다.블록문(block statement/compound statement)은
{}
로 묶은 것으로// 블록문
{
var foo = 10;
}
// 제어문
var x = 1;
if (x < 10) {
x++;
}
// 함수 선언문
function sum(a, b) {
return a + b;
}
조건문(conditional statement)은
if-else
문과 switch
문 두가지 조건문을 제공한다.if-else
문은
boolean
값으로 평가될 수 있는 표현식)의else if
문을 사용.if-else
문은 삼항 조건 연산자로 바꾸어 사용할 수 있다.if (조건식) {
// 조건식이 참이면 이 코드 블록이 실행
} else {
// 조건식이 거짓이면 이 코드 블록이 실행
}
if (조건식1) {
// 조건식1이 참이면 이 코드 블록이 실행
} else if (조건식2) {
// 조건식2이 참이면 이 코드 블록이 실행
} else {
// 조건식1, 2 모두 거짓이면 이 코드 블록이 실행
}
switch
문은
case
문으로 실행 흐름을 옮긴다.:
)으로 마친다.default
문으로 이동한다. default
문에서 break
문을 생략하는것이 일반적이다.switch(표현식) {
case 표현식1:
표현식과 표현식1이 일치하면 실행될 문;
break;
case 표현식2:
표현식과 표현식2이 일치하면 실행될 문;
break;
case 표현식3:
표현식과 표현식3이 일치하면 실행될 문;
break;
default: 표현식과 일치하는 case문이 없을 때 실행될 문;
}
💡 폴 스루(fall through) 란?
switch
문을 탈출하지 않고switch
문이 끝날 때까지 모든case
문과default
문을 실행되는것을 뜻한다.// 월을 영어로 변환한다. (4 -> 'April') var month = 4; var monthName; switch(month) { case 1: monthNAme = 'January'; case 2: monthNAme = 'February'; case 3: monthNAme = 'March'; case 4: monthNAme = 'April'; case 5: monthNAme = 'May'; case 6: monthNAme = 'June'; case 7: monthNAme = 'July'; case 8: monthNAme = 'August'; case 9: monthNAme = 'September'; case 10: monthNAme = 'October'; case 11: monthNAme = 'November'; case 12: monthNAme = 'December'; default: monthName = "Invalid month" } console.log(monthName); // Invaild month
반복문(loop statement)은
for
문, while
문, do-while
문을 제공한다.for
문은
for
문의 변수 선언문, 조건식, 증감식은 모두 옵션이므로 반드시 사용할 필요는 없다. for (변수 선언문 또는 할당문; 조건식; 증감식) {
// 조건식이 참인 경우 반복 실행할 문;
}
while
문은
for
문은 반복 횟수가 명확할 때 주로 사용하고 while
문은 반복 횟수가 불명확할 때 주로 사용한다.while(조건식) {
// 조건식이 참일 때 실행할 문;
}
// 무한 루프
while(true) {
// ...
}
💡 무한루프에서 탈출하기 위해서는
코드 블록 내에
if
문으로 탈출 조건을 만들고,break
문으로 코드 블록을 탈출한다.
do-while
문은
do {
// ...
} while (조건식);
break
문은
switch
문의 코드 블록을 탈출한다. for
문 외부로 탈출할 때 유용하지만 // outer 라는 식별자가 붙은 레이블 for 문
outer: for(var i = 0; i < 3; i++) {
for(var j = 0; j < 3; j++) {
// i + j === 3이면 outer라는 식별자가 붙은 레이블 for 문을 탈출한다.
if(i+j === 3) break outer;
console.log(`inner [${i}, ${j}]`);
}
}
console.log('Done!');
continue
문은
break
문처럼 반복문을 탈출하지는 않는다.var string = 'Hello world';
var search = 'l';
var count = 0;
// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for(var i = 0; i < string.length; i++) {
// 'l' 이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
if(string[i] !== search) continue;
count++;
}
console.log(count); // 3
// 참고로 String.prototype.match 메서드를 사용해도 같은 동작을 한다.
const regexp = new RegExp(search, 'g');
console.log(string.match(regexp).length); // 3