궁금한 점이 생겨 질문드립니다 :)

해결됨
Go9 프로필

안녕하세요! 코드를 짜보면서 궁금한 점이 생겨 질문합니다. 

올려주신 예제 코드를 보았을 때,

두 번째 printResult 함수의 매개 변수 중 x는 구구단 결과를 출력합니다. 그러나 두 번째 매개변수인 ret은 사용 목적이 어떻게 되는 것인가요?

 

 

코드스쿼드 정호영 프로필
코드스쿼드 정호영 2019.06.26

두 번째 소스를 잘 보시면 x는 x단의 x이고 ret은 x단을 계산한 결과값이 들어갑니다.

var n = 3; //3

var result = gugudan(n); //result에 3단의 출력 결과가 배열로 들어감

printResult(n, result); //3단 계산 결과 출력

 

Go9 프로필
Go9 2019.06.27

안녕하세요 선생님!
상세한 답변 감사드립니다.

그럼에도 질문이 생겨 한번 더 도움을 구해도 될까요? :)

1, function printResult(x, ret) {} 에서, 매개변수 x는 입력된 x값이 어떤 숫자인지에 따라 구구단의 결과가 출력되는 용도로 사용됩니다. 즉, 결과로 보여줄 구구단의 단수를 결정하는 역할을 수행합니다.

2. 그러나 위에 선언될 당시, 
즉, printResult(x, ret) 함수 내에서 ret은 아무런 역할이 없어 보이기만 하는데 잘못 이해하고 있는 걸까요?

2.1 main함수 영역에서 printResult 함수의 매개변수 ret 자리에 쓰인 것은  result입니다. 
말씀해주신 대로 var result = gugudan(n) 이라면, 이 선언으로 result에 n단의 출력결과가 배열로 들어갑니다. (gugudan 함수로 인하여.)

만약 배열을 저장하려는 의도라면, 굳이 printResult함수의 매개변수를 result로 다시 입력해 줄 필요가 있나요?? 

3. 그래서 애초에 printResult함수의 매개변수를 (x, ret)이 아닌, (x)로만 설정하고

function printResult(x) {
  document.write("<h2>" + x + "단</h2>")
  for (var i = 1; i <= 9; i++) {
  var y = x * i;
  document.write(x + " * " + i + " = " + y + "<br>");
  }
  }


main 함수에서도 printResult(n); 으로만 선언한다면, //

function main() {
  console.log("main 함수가 실행되었습니다.");
  for (var n = 2; n<= 9; n++) {
  var result = gugudan(n);
  printResult(n);
  }
  }
  main();

이전과는 어떤 차이가 있을까요?

고민해보고 고민해보았는데, 아직 이해가 부족하여 다시 여쭙게 되었습니다.
읽어주셔서 감사합니다.

코드스쿼드 정호영 프로필
코드스쿼드 정호영 2019.06.28

안녕하세요? 답변을 한다는 것을 깜박 잊었네요. 

두 번째 코드는 printResult()가 두 가지 일을 하고 있습니다. 그리고 함수의 이름은 결과를 출력한다는 건데 자체적으로 계산까지 하고 있으니 이름과 의도가 다르죠. 계산은 gugudan(n) 에서 하고 (사실 정확하게는 CalculateNDan(n) 이렇게 이름을 짓는 게 더 좋았을 것 같습니다.) 

함수는 1) 한 번에 한 가지 일(역할)을 해 줄 것 2)전역변수를 사용하지 말 것 3)입력은 매개변수로 받고 4) 결과는 리턴 또는 화면에 출력해 주는 것이 좋습니다.

 

tiroring09@gmail.com 프로필
tiroring09@gmail.com 9달 전

안녕하세요 저도 수업을 듣던 중 동일한 의문이 생겨서 질문글을 남기려 들어왔는데, 먼저 수강해주신 분이 글을 남겨주셨군요!

제가 학습한 바에 따르면, 본 강의에서는 main() 안에 gugudan()과 printResult()를 기능적으로 구분함으로써 코딩의 가독성을 높이고자 하는 학습목표가 있습니다.

이를 위해 gugudan()의 결과값으로 도출되는 result배열을 printResult()의 인수로 설정해주었는데요, 만일 이런 설계의도에 따라 printResult()를 코딩해준다면, 아래와 같이 할 수 있지 않을까 싶습니다.

function printResult(x, ret){
        document.write("<h2>" + x + "단</h2>");
        for(i = 0; i < ret.length; i++){
          document.write(x + " * " + (i+1) + " = " + ret[i+1]+ "<br>");
        }
      }

다른 점이라고 한다면, 반복문 내부 맨 뒷부분인 x * i 대신에 배열의 원소를 호출하는 ret[i+1]을 넣음으로써 애초에 printResult()에 ret 파라미터를 설정한 의도를 반영할 수 있을 것 같습니다.

아직 많은 것이 낯설은 입장이라 피드백 주시면 감사하겠습니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스