제어문

정수·2023년 3월 22일
0
post-thumbnail

본 게시글에선 기본적인 연산자에 대한 설명은 생략하고 주의하거나 헷갈릴만한 것들에 대해서만 안내하고 있습니다.

01. switch 문

break문을 사용하지 않으면 이후 case문과 default문을 모두 실행하는 폴스루(fall through)가 나타나 의도대로 실행되지 않을 수 있다.

var changeName = function (month) {
  var monthName;
  switch (month) {
    case 1: monthName = "January";
    case 2: monthName = "February";
    ...
    case 12: monthName = "December";
    default: monthName = "Invalid month";
  }
  return monthName;
}

console.log(changeName(1)); // 'Invalid month'

var changeName = function (month) {
  var monthName;
  switch (month) {
    case 1: monthName = "January";
      break;
    ...
    case 12: monthName = "December";
      break;
    default: monthName = "Invalid month";
  }
  return monthName;
}

console.log(changeName(1)); // 'January'

때론 해당 속성을 이용해서 작성하는 경우도 있습니다.

...
switch (month) {
  case 1: case 3: case 5: ... case 12:
    days = 31;
    break;
  ...
}

만약 if ... else 문으로 해결할 수 있다면 switch 문을 사용하지 않는 것이 좋지만 가독성이 더 좋아질 경우 적절히 사용하는 편입니다.

02. do ... while 문

코드 블록을 먼저 실행한 뒤 조건식을 평가합니다.

var count = 0;
do {
  console.log(count);
  count++;
} while (count < 0);
// 0

03. break 문

레이블 문(label statement: 식별자가 붙은 문), 반복문, switch 문의 코드 블록을 탈출합니다.

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

하지만 레이블 문은 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 일반적으로 권장하지 않습니다.

04. continue 문

continue 문은 반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 이동시킬 때 사용합니다. 아래 2개의 예시는 동일하게 동작합니다.

for (var i = 0; i < string.length; i++) {
  if (string[i] !== search) continue; // continue 문 사용
  count++;
  ...
}

for (var i = 0; i < string.length; i++) {
  if (string[i] === search) {
    count++;
    ...
  }
}
profile
해피한하루

0개의 댓글