[JS] 조건문을 스마트하게?

Chanki Hong·2022년 12월 15일
0

JavaScript

목록 보기
26/30
post-thumbnail

알고리즘 공부를 시작하면서, 검색하지 않고 몇 시간 코딩한다.
코딩하면서 몇 가지의 어려움을 만나는데, 처음 만나는 어려움은 "문제가 뭐였지?" 다. 문제 이해가 어렵다.ㅋㅋㅋㅋ

문제를 이해하고 나면 해결책이 몇 가지 머리에 떠오르는데, 그중에 가장 간결하고 보기(이해하기) 좋을 것 같은 방향으로 코딩한다. (머릿속의 최선을 선택한다)
대단한 실력자와는 거리가 굉장히 멀지만, 간결하고 보기(이해하기) 좋은 코드가 베스트라고 생각하기 때문이다.

나름 최선의 방향으로 문제를 해결하게 되면 난 정말 대단한 사람이라고 생각한다.
다른 사람의 해결 방법을 보기 전까지만 그렇게 생각한다.
세상에는 간결하고 보기 좋게 코딩하는 사람이 정말 정말 많다는 것을 느낀다.
그런 센스를 조금이라도 배우고자 조건문을 스마트하게 쓰는 방법을 정리하게 되었다.


조건문을 스마트하게 쓰려면

text 가 배도라지 멤버라면 true를 반환

첫번째로 드는 생각

  • if 문이 생각남.
function isBedoRage(text) {
  if (text === '매직박') return true;
  if (text === '침착맨') return true;
  if (text === '주펄') return true;
  if (text === '승우아빠') return true;
  return false;
}
console.log(isBedoRage('승우아빠')); // true
console.log(isBedoRage('정래운')); // false
  • 또는 연산자의 단축평가도 생각남.
function isBedoRage(text) {
  return (
    text === '매직박' ||
    text === '침착맨' ||
    text === '주펄' ||
    text === '승우아빠'
  );
}
console.log(isBedoRage('주펄')); // true
console.log(isBedoRage('정래운')); // false

배열을 이용하면?

  • 배열 내장 함수(메서드)를 이용하면 간결하게 해결.
function isBedoRage(text) {
  // 조건을 배열에 넣음.
  const BedoRage = ['매직박', '침착맨', '주펄', '승우아빠'];
  // includes() 메서드를 이용해 배열에 존재여부로 판단.
  return BedoRage.includes(text);
}
console.log(isBedoRage('주펄')); // true
console.log(isBedoRage('정래운')); // false
  • 여기에 화살표 함수를 더하면 간결하고 이해하기 좋은 섹시한 코드 완성.
const isBedoRage = (text) =>
  ['매직박', '침착맨', '주펄', '승우아빠'].includes(text);
console.log(isBedoRage('주펄'));
console.log(isBedoRage('정래운'));

.includes() 메서드

  • 배열이 특정 원소를 포함하는지 판별함.
  • arr.includes(valueToFind[, fromIndex])
  • valueToFind 는 탐색할 원소. (대소문자 구분)
  • fromIndexoptional 파라미터.
  • 배열에서 탐색을 시작할 index 값. (기본값 0)
  • return 값은 boolean.
console.log([1, 2, 3].includes(2)); // true
console.log([1, 2, 3].includes(4)); // false
console.log([1, 2, 3].includes(3, 3)); // false

특정 동물의 울음소리를 반환

첫번째로 드는 생각

  • if 문이 생각남.
function getSound(animal) {
  if (animal === '개') return '멍멍!';
  if (animal === '고양이') return '야옹~';
  if (animal === '참새') return '짹짹';
  if (animal === '비둘기') return '구구구구';
  return ',,,?';
}
console.log(getSound('개')); // 멍멍!
console.log(getSound('비둘기')); // 구구구구
console.log(getSound('인간')); // ,,,?
  • 또는 switch case 문이 생각남.
function getSound(animal) {
  switch (animal) {
    case '개':
      return '멍멍!';
    case '고양이':
      return '야옹~';
    case '참새':
      return '짹짹';
    case '비둘기':
      return '구구구구';
    default:
      return ',,,?';
  }
}
console.log(getSound('개')); // 멍멍!
console.log(getSound('비둘기')); // 구구구구
console.log(getSound('인간')); // ,,,?

객체를 이용한다면?

function getSound(animal) {
  const sounds = {: '멍멍!',
    고양이: '야옹~',
    참새: '짹짹',
    비둘기: '구구구구',
  };
  // 객체 key를 이용.
  return sounds[animal] || ',,,?';
}
console.log(getSound('개')); // 멍멍!
console.log(getSound('비둘기')); // 구구구구
console.log(getSound('인간')); // ,,,?
  • 객체에 출력하는 메서드까지 넣을 수 있음.
function makeSound(animal) {
  const tasks = {
    // 화살표 함수 선언 가능.
    : () => {
      console.log('멍멍!');
    },
    // ES6 메서드 선언 방법.
    고양이() {
      console.log('야옹!');
    },
    // 익명함수도 가능.
    비둘기: function () {
      console.log('구구구구');
    },
  };
  if (!tasks[animal]) {
    console.log(',,,?');
    return;
  }
  tasks[animal]();
}

makeSound('개'); // 멍멍!
makeSound('비둘기'); // 구구구구
makeSound('인간'); // ,,,?

0개의 댓글