Replacing switch statements with Object literals

장효인·2019년 12월 5일
0

switch statement?

var type = 'coke';
var drink;
switch(type) {
case 'coke':
  drink = 'Coke';
  break;
case 'pepsi':
  drink = 'Pepsi';
  break;
default:
  drink = 'Unknown drink!';
}
console.log(drink); // 'Coke'

switch VS if else

function getDrink (type) {
  if (type === 'coke') {
    type = 'Coke';
  } else if (type === 'pepsi') {
    type = 'Pepsi';
  } else if (type === 'mountain dew') {
    type = 'Mountain Dew';
  } else if (type === 'lemonade') {
    type = 'Lemonade';
  } else if (type === 'fanta') {
    type = 'Fanta';
  } else {
    // acts as our "default"
    type = 'Unknown drink!';
  }
  return 'You\'ve picked a ' + type;
}

Problems with switch

  • 'break'를 수동으로 추가해야한다.
  • 각 'case'내의 명령문으로 인해 디버깅이 어려워지고 잊어 버린 경우 중첩 오류가 발생할 수 있다.
  • JavaScript는 중괄호를 사용하지만 스위치는 그렇지 않다.

Object Literal lookups

function getDrink (type) {
  var drinks = {
    'coke': 'Coke',
    'pepsi': 'Pepsi',
    'lemonade': 'Lemonade',
    'default': 'Default item'
  };
  return 'The drink I chose was ' + (drinks[type] || drinks['default']);
}

var drink = getDrink('coke');
// The drink I chose was Coke
console.log(drink);
function getDrink (type) {
  return 'The drink I chose was ' + {
    'coke': 'Coke',
    'pepsi': 'Pepsi',
    'lemonade': 'Lemonade'
  }[type];
}
  • switch에 비해 유연하고 가독성과 유지 관리 성이 우수하다.
  • 수동으로 분리 할 필요가 없다.
  • case수가 증가함에 따라 Object의 성능은 스위치의 평균 비용보다 우수하다.
    -Object의 접근 방식은 해시 테이블 조회, switch 일치 및 중단에 도달 할 때까지 각 사례를 평가해야한다.

0개의 댓글