강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

지루한 오소리님의 프로필 이미지
지루한 오소리

작성한 질문수

쉽고 자연스럽게 배워보는 Javascript 입문 - 코드스쿼드 마스터즈 코스 레벨1

함수를 활용해 사칙연산 구현

질문 드립니다.

작성

·

191

1

안녕하세요, 강의 듣다가 저 혼자 도움 없이 코드를 작성해보았는데 작동은 잘 되고 오류도 없다고는 뜨는데 한번 봐주실 수 있을까요?

저는 main 함수에 최대한의 변수를 선언하려고 했어요. 근데 각 함수마다 변수를 안데려온 것도 있는데 (calculate 함수를 예로 들면 result, num2만 다시 선언하고 op를 다시 선언 안해줬어요. 뭔가 op는 이미 getOperator 함수에서 (일시적으로) 고정된 변수 느낌이라 다른 함수에서 불러올 때 선언 안해줬거든요. 전부 다 선언해주는게 맞나요? 작동은 잘 돼서 헷갈리네요

강의 항상 잘 듣고 있습니다 ~

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>내가 만든 함수를 이용한 사칙연산 구현</h1>
    <div id="out">결과값과 식은 여기에</div>
    <script>
        //첫 번째 변수 선언
        function getFirstValue() {
            num1 = Number(prompt("1번 째 숫자를 입력해주세요."));
            return num1;
        };
        //연산자 선언
        function getOperator() {
            op = prompt("연산자를 입력해주세요.");
            return op;
        }
        //n 번째 변수 선언
        function getSecondValue(num2, n) {
            num2 = Number(prompt(n + "번 째 숫자를 입력해주세요."));
            return num2;
        }
        // 계산
        function calculate(result, num2) {
            if (op === "+") {
                result += num2;
            } else if (op === "-") {
                result -= num2;
            } else if (op === "*") {
                result *= num2;
            } else if (op === "/") {
                result /= num2;
            } else {
                result = "연산자 오류";
            }
            return result;
        }
        // 출력
        function print(eq, result) {
            output = document.getElementById("out");
            return out.innerHTML = "<h3>입력한 식 : " + eq + "<br> 계산 결과 : " + result + "</h3>";
        }
        // 메인함수
        function main() {
            var num1 = getFirstValue();
            var result = num1;
            var n = 2;
            var str = ""; 
            str = num1;
            var eq;
            while(true) {
                var op = getOperator();
                if (op === "q") { break; } 
                var num2 = getSecondValue(num2, n);
                str += op + num2;
                eq = str;
                result = calculate(result, num2);
                n++
            }
            var output = print(eq, result);
        }
        main();
    </script>
</body>
</html>

답변 1

0

호눅스님의 프로필 이미지
호눅스
지식공유자

안녕하세요? 답변이 늦어서 죄송합니다.

일단은 정상적으로 동작하면 큰 문제가 되지 않는데요. 이후에 차차 더 좋은 코드를 짜는 방법을 학습하시면 됩니다.

그리고 가능하면 op도 매개변수로 사용해 주는 것이 좋습니다. 나중에 배우겠지만, 전역변수를 사용하면 유지보수에 좋지 않기때문에 가능하면 지역변수, 매개변수를 적절하게 사용하는 것을 권합니다.

지루한 오소리님의 프로필 이미지
지루한 오소리

작성한 질문수

질문하기