본문 바로가기

Study/Today I Learn

[TIL] 2019.04.08 - 다각형의 넓이 구하기

다각형 넓이 구하기

app.js

const Area = require('./area.js')

const calcArea = new Area()

const {log} = console

log(calcArea.getCircleArea(2)) 
log(calcArea.getRectArea(2, 4)) 
log(calcArea.getTrapeArea(1, 2, 4))
log(calcArea.getCylineArea(2, 4))

area.js

const {
    PI
} = Math

const NUM_CIRCLE_PARAM = 1,
    NUM_RECT_PARAM = 2,
    NUM_TRAPE_PARAM = 3,
    NUM_CYLINE_PARAM = 2

const isNumber = (param) => {
    return Number.isFinite(param) &&
        typeof param === "number"
}

const paramCheck = (l, args) => {
    if (![...args].every(isNumber)) throw Error("인자는 숫자만 가능합니다.")
    if (args.length !== l) throw Error(`인자 ${l}개가 필요합니다.`)
    return true
}

module.exports = class Area {
    getCircleArea(r) {
        if (paramCheck(NUM_CIRCLE_PARAM, arguments)) return PI * r * r
    }

    getRectArea(w, h) {
        if (paramCheck(NUM_RECT_PARAM, arguments)) return w * h
    }

    getTrapeArea(uw, dw, h) {
        if (paramCheck(NUM_TRAPE_PARAM, arguments)) return ((uw + dw) * h) / 2
    }

    getCylineArea(r, h) {
        if (paramCheck(NUM_CYLINE_PARAM, arguments)) {
            let circleArea = this.getCircleArea(r)
            let rectArea = this.getRectArea(2 * r * PI, h)
            return circleArea * 2 + rectArea
        }
    }
}

Difference between isFinite() and Number.isFinite()

두 메서드 모두 주어진 값이 유한수 인지 판별하는 메서드지만 전역에 선언되어있는 isFinite() 와 다르게 Number.isFinite() 주어진 값을 숫자로 변환하지 않습니다.
따라서 값이 숫자이고 유한수가 아닌 경우에 true 를 반환합니다.

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true

Number.isFinite('0');       // false
                            // 전역함수 isFinite('0')라면 true
Number.isFinite(null);      // false 
                            // 전역함수 isFinite(null)라면 true

출처

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite

'Study > Today I Learn' 카테고리의 다른 글

[TIL] 2019.04.09 - 다각형 넓이 구하기 (2)  (0) 2019.04.09
[TIL] 2019.04.09  (0) 2019.04.09
[TIL] 2019.04.08 - debug  (0) 2019.04.08
[TIL] 2019.04.05 - Algorithm  (0) 2019.04.07
[TIL] 2019.04.05  (0) 2019.04.05