코밍이의 하루
[Deep Dive Study] 8장 제어문 본문
*제어문 : 조건에 따라 코드 불록을 실행하거나 반복 실행할 때 사용한다.
(조건문, 반복문)
8.1 블록문
1. 0개 이상의 문을 중괄호 {}로 묶은 것, 코드 블록 또는 블록이라고 부른다.
1) 하나의 실행 단위로 취급한다.
2) 단독으로 사용할 수도 있으나 일반적으로 제어문이나 함수를 정의할 때 사용한다.
3) 자체 종결성을 가지고 있어 블록문 끝에는 세미콜론을 붙이지 않는다.
// 블록문
{
var score = 2;
}
// 제어문
var i = 10;
if (i >= 10) {
i--;
}
// 함수 선언문
function sub(x,y) {
return x - y;
}
8.2 조건문
- 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정한다.
- 불리언 값으로 평가될 수 있는 표현식이다.
1. if ... else 문
1) 주어진 조건식의 평가 결과에 따라 실행할 코드 블럭을 결정한다.
2) true인 경우 if 문의 코드 블록을 실행하고 false인 경우 else문의 코드 블록을 실행한다.
3) 조건식을 늘리고 싶은 경우 else if를 사용한다.
4) else if 문과 else문은 옵션으로 사용하지 않아도 된다.
5) if 문과 else문은 1번만 사용 가능하지만 else if 문은 여러 번 사용할 수 있다.
6) 코드 블록 내 문이 한개인 경우 중괄호 생략이 가능하다.
7) 대부분의 if...else문은 삼항 조건 연산자로 변경이 가능하다.
var n = 4;
var result;
// if...else if 문
if ( n > 0 ) {
result = '+';
} else if ( n < 0 ) {
result = '-';
} else {
result = '0';
}
// 삼항 연산자
result = n ? ( n > 0 ? '+' : '-') : '0'
console.log(result); // +
2.switch 문
1) 주어진 표현식을 평가하여 그 값을 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮긴다.
2) 상황을 의미하는 표현식을 지정하고 콜론으로 마친 뒤 실행할 문들을 위치시킨다.
3) 실행할 문의 없는 경우 default 문으로 이동한다. default는 옵션으로 사용하지 않을 수도 있다.
4) default 문에는 별도의 break문이 필요 없다.
var day = 2;
var dayName;
switch(day) {
case 1: dayName = 'Mon';
break;
case 2: dayName = 'Tue';
break;
case 3: dayName = 'Wed';
break;
case 4: dayName = 'Thr';
break;
case 5: dayName = 'Fri';
break;
case 6: dayName = 'Sat';
break;
case 7: dayName = 'Sun';
break;
default: dayName = 'Invalid day';
}
console.log(dayName); // 'Tue'
5) 폴스루(fall through) : switch 문의 표현식의 평가 결과와 일치하는 case 문을 실행하고 이후의 모든 case 문과 default 문을 실행하는 것
- case문에는 보통 break문을 사용하여 switch 문을 빠져나간다. 그렇지만 폴스루를 활용할 수도 있다.
var year = 2000;
var month = 2;
var days = 0;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31;
break;
case 4: case 6: case 9: case 11:
day = 30;
break;
case 2:
// 윤년 계산 알고리즘
// 1. 연도가 4로 나누어 떨어지는 해는 윤년
// 2. 연도가 4로 나누어 떨어지더라도 연도가 100으로 나누어떨어지는 해는 평년
// 3. 연도가 400으로 나누어떨어지는 해는 윤년
day = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? 29 : 28;
break;
default:
console.log('Invalid month');
}
console.log(days);// 29
8.3 반복문
- 조건식이 거짓일 때까지 반복한다.
1. for문
1) 반복 횟수가 명확할 때 사용한다.
for(var i = 1; i >= 0; i--) {
console.log(i);
}
// 무한루프
for(;;) { ... }
// 이중 for문
for(var i = 1; i <= 9; i++) {
for(var j = 1; j <= 9; j++) {
if( i + j === 6) console.log(`[${i}, ${j}]`);
}
}
2. while문
1) 반복 횟수가 불명확할 때 사용한다.
var cnt = 0;
while(true) {
console.log(cnt);
cnt++;
if(cnt === 3) break;
}
3. do while문
1) 한 번 실행하고 조건식을 평가한다.
var cnt = 0;
do {
console.log(cnt);
cnt++;
} while (cnt < 3);
8.4 break 문
1. 레이블 문, 반복문, switch문의 코드 블록을 탈출한다.
1) 그 외에 문에는 문법 에러가 발생한다.
* 레이블 문 : 식별자가 붙은 문, 중첩된 for 문 외부로 탈출 시에 유용하지만 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 일반적으로 권장하지 않는다.
foo: {
console.log(1);
break foo; // foo 레이블 블록문을 탈출한다.
console.log(2);
}
2) 레이블 식별자를 지정하지 않고 반복문을 더 이상 진행하지 않아도 될 때 불필요한 반복을 피할 수 있다.
8.5 continue문
1. 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
2. 반복문을 탈출하지는 않는다.
//continue 미사용
for ( var i = 0; i < string.length; i++) {
if (string[i] === search) {
count++;
}
}
//continue 사용
for ( var i = 0; i < string.length; i++) {
if (string[i] === search) continue;
count++;
}
Review
- 이번 장의 경우는 어렵지 않게 읽었던 것 같고 break문에서 레이블 문 사용하는 부분을 처음보았다. c언어를 처음 배웠을 때 나온 goto문이랑 비슷한 것 같다. 여기서도 레이블 문은 코드를 복잡하게 만들어서 사용을 지양하는 것 같다.
출처 : https://wikibook.co.kr/mjs/
모던 자바스크립트 Deep Dive: 자바스크립트의 기본 개념과 동작 원리
269개의 그림과 원리를 파헤치는 설명으로 ‘자바스크립트의 기본 개념과 동작 원리’를 이해하자! 웹페이지의 단순한 보조 기능을 처리하기 위한 제한적인 용도로 태어난 자바스크립트는 과도
wikibook.co.kr
'웹언어 공부 > JS' 카테고리의 다른 글
[Deep Dive Study] 10장 객체 리터럴 (0) | 2023.03.01 |
---|---|
[Deep Dive Study] 9장 타입 변환과 단축 평가 (0) | 2023.03.01 |
[Deep Dive Study] 7장 연산자 (1) | 2023.02.25 |
[Deep Dive Study] 6장 데이터 타입 (0) | 2023.02.25 |
[Deep Dive Study] 5장 표현식과 문 (1) | 2023.02.24 |