Front-End/JavaScript

CodeWars 2. simpleMultiplication

어펭져스 2018. 7. 22. 14:38

문제.

This kata is about multiplying a given number by eight if it is an even number and by nine otherwise.

짝수면 8을 곱하고 아니면 9를 곱하도록 하시오.




나의 답변.

만약 if (x % 2 = 0) 이렇게 적으면 error. 이유는 아직 잘 모르겠다.



function simpleMultiplication(x) {

  if (x % 2 === 0) {

    return x * 8;

  } else {

    return x * 9;

  }

}





다른 이들의 답변.

가독성 때문에 띄어쓰기를 수정하였다.

간단한 문제지만 다른 사람의 코드가 아직 이해되지 않는다.

문법에 익숙하지 않아서 그런 것 같다.

그냥 '아 이렇게 간단하게도 쓸 수 있구나' 참고 정도...




1) 


function simpleMultiplication(n) {

    return n * (n % 2 ? 9 : 8);

}


2)


const simpleMultiplication = n => n * (n % 2 ? 9 : 8)



두 개의 코드에서 이해가 안되는 점.



javascript에서는 1은 true, 0은 false라는 의미를 가진다.


위 두가지 코드를 삼항연산자로 분석해보면 

n % 2 = boolean 값이 나오는 조건식이다.


n에 정수 값을 입력하면 n % 2의 답은 무조건 0 아니면 1이 나온다.

그럼 javascript에서 boolean값에 맞게 나오고, 내가 코드를 이해하는데도 문제가 없다.



다만 궁금한 점은 n에 실수 값을 입력했을 때다.

콘솔에서 n의 값으로 0.443을 입력했다.

0.443를 2로 나누었을 때 나머지 값은 절대 1이나 0으로 나오지 않는데

콘솔에 찍어보면 n에 그 어떤 인수를 대입해도 true 값이 나오는 것이다......


이게 이해가 안돼서 슬프다. (울적)






function simpleMultiplication(n) {

  return n % 2 == 0 ? n * 8 : n * 9

}


삼향연산자인데 책에서 배웠다. (주교재 182쪽)

나머지 방식들은 배운 적이 없으니 모르지만.....

이건 알고 있는 건데.....

이렇게 답변 했어야 좋은 학생인데..... (울적)




function simpleMultiplication(number) {

  if (typeof number === 'number') {

    return number * (8 + number % 2);

  } else {

    console.log(arguments.callee.name + ': Invalid argument');

  }

}