Es2020 3강 Calculator

dongmen5149·2021년 2월 20일
0

JavaScript

목록 보기
3/4
post-thumbnail

계산기의 순서도를 그려본다.

모든 생각을 순서도로 그릴순 없기때문에 순서도를 그리지 않고도 코딩을 할 수 있는 부분은 코딩을 하고 머리속으로 하기 힘든 부분은 순서도를 작성한다.

const numberInput =  document.querySelector('#input');
const clearButton =  document.querySelector('#clear');
const plusButton =  document.querySelector('#plus');
const minusButton =  document.querySelector('#minus');
const divideButton =  document.querySelector('#divide');
const multiplyButton =  document.querySelector('#multiply');
const calculateButton =  document.querySelector('#calculate');
const resultInput =  document.querySelector('#result');

이와 같이 변수를 지정하는 것은 순서도를 굳이 쓰지않아도 코딩할 수 있기 때문에. 순서도에 넣지 않는다.(점점 이러한 것들을 늘려나간다)

null : 초기화 (undefined)

순서도대로 코딩을 했으나 동작하지 않는다면 순서도와 코딩을 비교하며 다시 분석한다.

5 + 6 = 작동하였을때 56이 나오게 되면 문자열로 인식한 것이다
=> 숫자로 표시하고 싶다면
temp = Number(numberInput.value)
로 문자열을 숫자로 지정한다.

문자열이 포함되어있는 +는 나머지가 문자열로 바뀌어서 연산되지만
-, *, / 은 문자열이 숫자로 바뀌어서 연산된다.

plusButton.addEventListener('click', () => {
    if (temp) {
        operator = '+'
    } else {
        if (numberInput.value) {
            temp = Number(numberInput.value)
            operator = '+'
            numberInput.value = null
            resultInput.value = null
        }
    }
})

minusButton.addEventListener('click', () => {
    if (temp) {
        operator = '-'
    } else {
        if (numberInput.value) {
            temp = Number(numberInput.value)
            operator = '-'
            numberInput.value = null
            resultInput.value = null
        }
    }
})
multiplyButton.addEventListener('click', () => {
    if (temp) {
        operator = '*'
    } else {
        if (numberInput.value) {
            temp = Number(numberInput.value)
            operator = '*'
            numberInput.value = null
            resultInput.value = null
        }
    }
})

divideButton.addEventListener('click', () => {
    if (temp) {
        operator = '/'
    } else {
        if (numberInput.value) {
            temp = Number(numberInput.value)
            operator = '/'
            numberInput.value = null
            resultInput.value = null
        }
    }
})

이와 같은 중복을 최대한 제거해주는 것이 좋다.(같은짓을 계속하는 것을 최대한 기피한다)

버그를 발견했을때 순서도에서 찾아보고 코드와 다시 비교.

calculateButton.addEventListener('click', () => {
    console.log(temp, operator, numberInput.value)
    if (operator) {
        if (numberInput.value) {
            if (operator === '+') {
                resultInput.value = temp + Number(numberInput.value)
            }
            else if (operator === '-') {
                resultInput.value = temp - Number(numberInput.value)
            }
            else if (operator === '*') {
                resultInput.value = temp * Number(numberInput.value)
            }
            else if (operator === '/') {
                resultInput.value = temp / Number(numberInput.value)
            }
        }
        temp = resultInput.value
    }
    else {
        if (numberInput.value) {
            resultInput.value = temp
        }
    }
}
)

에서 결과값 13에 + 4를 하면 134가 되는 버그가 존재 이를 마지막
temp = resultInput.value 값이 문자로 인식되었기때문 이를
temp = Number(resultInput.value) 로 바꾸어 숫자로 인식되게 해야한다.
버그 => 누군가가 그 버그를 다시 재연해야한다.(Test를 계속하여 버그를 찾아야한다)

profile
쓴다.노트.하는동안.공부

0개의 댓글