Calculating with Functions

이조은·2021년 1월 5일
0

Code Kata

목록 보기
12/15
post-thumbnail

문제

함수 이름에 맞는 숫자 및 연산자가 리턴되게끔 만들어야 한다. 반드시 2개의 숫자, 연산자가 나온다.

seven(times(five())); // must return 35
four(plus(nine())); // must return 13
eight(minus(three())); // must return 5
six(dividedBy(two())); // must return 3
eight(dividedBy(three())); // must return 2

나의 풀이

🙆🏻‍♀️ 나의 첫 번째 풀이

우선 리팩토링이 필요할 것 같지만,, 첫 번째 풀이는 이러하다. 숫자 함수는 인자 유무에 따라 리턴 값이 달라진다. 똑같은 로직이지만 인자에 따라 다른 값을 원했기 때문에 operation 함수를 이용했고, 두 가지 경우의 수가 있기 때문에 두 개의 인자를 받게 했다.

결과적으로 "5*6"과 같은 스트링이 operation의 최종 리턴 값으로 나왔는데 eval()을 이용해서 문제를 해결했다.

💡 eval()
문자로 표현된 JavaScript 코드를 실행하는 함수.

아마 이 함수는 쓰지 말아야할 것 같다. 방금 찾아보니 이 함수를 쓰는 것은 엄청나게 위험하며 해커가 위험한 코드를 사용할 수 있어 절대 사용하지 말라고 MDN에서 일러준다....

function zero(left) {
  return operation(left, 0);
}
function one(left) {
  return operation(left, 1);
}
function two(left) {
  return operation(left, 2);
}
function three(left) {
  return operation(left, 3);
}
function four(left) {
  return operation(left, 4);
}
function five(left) {
  return operation(left, 5);
}
function six(left) {
  return operation(left, 6);
}
function seven(left) {
  return operation(left, 7);
}
function eight(left) {
  return operation(left, 8);
}
function nine(left) {
  return operation(left, 9);
}

function operation(left, num) {
  return left ? Math.floor(eval(num + left)) : num;
}

function plus(right) {
  return "+" + right;
}
function minus(right) {
  return "-" + right;
}
function times(right) {
  return "*" + right;
}
function dividedBy(right) {
  return "/" + right;
}
profile
싱글벙글

0개의 댓글