25일차 (2) - javascript (함수)

Yohan·2024년 3월 26일
0

코딩기록

목록 보기
33/156
post-custom-banner

3-3. 함수기초

함수란?

  • 함수란 어떠한 로직을 코드 블록으로 감싸서 하나의 이름이 있는 실행단위로 만든 것

함수의 호출

  • 함수는 정의한 자체로는 사용불가
    -> 꼭 호출을 통해 기능을 동작 시켜야함!

함수를 사용하는 이유

  1. 함수는 미리 코드를 모아 놓고 필요할 때마다 여러 번 호출가능
    -> 즉, 코드 실행 시점을 개발자가 결정할 수 있고 여러 번 재 사용이 가능
  2. 함수에 이름을 붙임으로써 함수의 역할을 잘 설명할 수도 있다.
    -> 따라서 코드의 모듈화로 인해 유지 보수에도 도움이 되며 재 사용성이 높아진다는 측면에서 유용

매개 변수 (parameter)

  • 매개변수란 함수 실행을 위해 필요한 데이터를 함수 내부로 전달할 목적으로 사용하는 변수
  • 꼭 필요한 것은 아님

인수 (argument)

  • 인수란 함수 외부에서 함수를 호출할 때 함수가 실행하기 위해 필요한 값을 함수 내부의 매개변수에게 전달하는 값

반환문 (return)

  • 반환문은 return키워드와 반환값으로 이뤄진 반환문을 사용해 실행 결과를 함수 외부로 전달

return은 함수의 탈출문!

  • 함수는 return을 만나는 순간 즉시 종료
    -> return; 만 작성해서 break처럼 강제종료 가능
  • return이 없는 함수는 변수에 저장하지 말고, 다른 함수의 매개값으로도 쓰면 안됨! (아무데도 사용하지않고 혼자만 동작)
// return은 함수의 탈출문 (종료문)
function add(n1, n2) {
  console.log(`n1: ${n1}, n2: ${n2}`);
  return n1 + n2;
}

// return이 없는 함수
function multi(n1, n2) {
  console.log(`${n1} x ${n2} = ${n1*n2}`);
}

console.log('======================');


// 반환값(return): 함수 호출부로 함수의 결과값을 전달해주는 것
var result = add(10, 20) * add(add(1, 4), add(1,1));
console.log(`result: ${result}`);

var r1 = multi(3, 4);
console.log(`r1: ${r1}`);
multi(2, 9);

multi(add(2,3), add(5,6));

// 리턴이 없는 함수는 변수에 저장하지 말고,
// 다른 함수의 매개값으로도 쓰면 안됨
var r2 = add(multi(2,4), multi(3,2));
console.log(`r2: ${r2}`);


// 데이터베이스를 접속하는 함수
// function connectDatabase(id, pw, auth) {
//   var connect = getConnection();
//   //...
//   //...
//   return true;

// }

// return이 없는 함수에서 return을 break처럼 사용하기
function callName(nickName) {
  var prohibits = ['바보', '멍청이', '메롱'];
  if (prohibits.includes(nickName)) {
    console.log('나쁜말 쓰지 마세요!!!');
    return; // return으로 함수 강제종료 가능 (break처럼)
  }
  console.log(`${nickName}님 안녕하세요!!`);
}

console.log('==========================');
callName("뽀로로");

return vs break

  • return은 모든 것을 종료시킴, break보다 강력함
  • break는 break가 있는 반복문만 종료시킴
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function stopLoop() {
        while (true) {
          var prom = prompt("명령어를 입력하세요!");
          if (prom === "멈춰") {
            break;
          }
          if (prom === "stop") {
            return;
          }
          alert(prom);
        } // end while - break
        alert("수고수고~~~");
      } // end function - return

      stopLoop();
    </script>
  </body>
</html>
  • 멈춰를 입력하게되면 break가 동작하게되고 반복문만 종료되어 수고수고~~~ 라고 메세지 출력
  • stop을 입력하게되면 return이 동작하게되고 모든 것을 종료시키게되어 아무것도 출력되지않음

퀴즈1

/* 
Q. n의 약수의 개수를 구하기
1. 정수 n을 전달받아 n의 약수들을 출력하고 
약수의 개수를 리턴하는 함수 calcDivisor를 정의하세요.
2. 약수의 출력은 함수 내부에서 이뤄져야 합니다.
3. 힌트) 전달받은 n을 1부터 n까지 지속적으로 나누어
 나누어 떨어졌을 시 약수의 개수 카운트를 1증가시키고 출력.
*/

// 호출부
function calcDivisor(n) {
  var count = 0;
  for(var i = 0; i < n+1; i++) {
    if(n % i == 0) {
      count++;
    }
  }
  return count;
}

var divCount = calcDivisor(20);
console.log(`약수의 개수: ${divCount}`);


// push를 이용해서 length로도 가능

// function calcDivisor(n) {

//   var divisor = [];
//   for (var i = 1; i <= n; i++) {
//     if (n % i === 0) {
//       divisor.push(i);
//     }
//   } //end for
//   console.log(divisor);

//   return divisor.length;
// }

소수점 반올림 Math.round()

  • Math.round()만 사용하면 반올림되어 정수로 출력
  • 소수점 둘째자리까지 하고싶다면?
    -> Math.round(내가 구한 수 * 100) / 100 을 하면된다.
5.78786455435
  x 100 =>   578.7864...
  반올림 =>  579
  / 100 =>   5.79
  • 만약에 셋째짜리 하고싶다면 x1000, /1000 을 하면된다 !

퀴즈2

/*
1. 키(cm)와 몸무게(kg)을 인수로 전달받아 
2. bmi지수를 계산하여 반환함과 동시에 
3. bmi가 25.0이상이면 "당신은 과체중입니다." 
  18.5이하면 "당신은 저체중입니다." 
  나머지는 "당신은 정상체중입니다."를 출력하는 
  CalcBMI라는 함수를 정의하고 호출하세요. 
# bmi 계산식 : 몸무게(kg) / (키(m) * 키(m)) 
# 출력 예시: 
"키 -> 178.4cm, 체중-> 78.2kg의 체질량지수는: 24.57입니다"

Math.round(5.78999); // 반올림 -> 6
*/


// 내 코드
function calcBMI(h, w) {
  var myBmi = Math.round(w / (h / 100 * h / 100) * 100) / 100;
  if(myBmi >= 25.0) {
    console.log("당신은 과체중입니다.");
    console.log(myBmi);
    return myBmi;
  } else if (myBmi <= 18.5) {
    console.log("당신은 저체중입니다.");
    console.log(myBmi);
    return myBmi;
  } else {
    console.log("당신은 정상체중입니다.");
    console.log(myBmi);
    return myBmi;
  }
}
// 100곱해서 4자리 짜르고 나누기100해서 소수점 2자리생성
// var myBmi = Math.round(w / (h/100 * h/100)*100)/100; 
// console.log(myBmi); 
var myBmi = calcBMI(179.5, 77);


// 선생님 코드

// bmi판별해서 체중상태를 출력하는 함수
function judgeWeight(bmi) {
  var level; 
  if (bmi >= 25.0) {
    level = '과';
  } else if (bmi <= 18.5) {
    level = '저';
  } else {
    level = '정상';
  }
  console.log(`당신은 ${level}체중입니다.`);
}

function calcBMI(cm, kg) {
  var m = cm / 100;
  var bmi = kg / (m * m);

  judgeWeight(bmi);
  
  return bmi;
}

// 어떤 숫자를 자릿수만큼 반올림하는 함수
/*
  Math.round()
  ex)  5.78889327428734 -> 6
       34.12314234523   -> 34

  5.78786455435
  x 100 =>   578.7864...
  반올림 =>  579
  / 100 =>   5.79
*/
function round(number, position) {
  return Math.round(number * position) / position;
}

/*
1. 키(cm)와 몸무게(kg)을 인수로 전달받아 
2. bmi지수를 계산하여 반환함과 동시에 
3. bmi가 25.0이상이면 "당신은 과체중입니다." 
  18.5이하면 "당신은 저체중입니다." 
  나머지는 "당신은 정상체중입니다."를 출력하는 
  CalcBMI라는 함수를 정의하고 호출하세요. 
# bmi 계산식 : 몸무게(kg) / (키(m) * 키(m)) 
# 출력 예시: 
"키 -> 178.4cm, 체중-> 78.2kg의 체질량지수는: 24.57입니다"

Math.round(5.78999); // 반올림 -> 6
*/

var h = 178.4, w = 78.2;
var myBmi = calcBMI(h, w);

console.log(`키 -> ${h}cm, 체중 -> ${w}kg의 체질량지수는 ${round(myBmi, 3)}입니다.`);

퀴즈3

// 1번
// function min2(x, y) {
//   if (x > y) {
//     return y;
//   } else {
//     return x;
//   }
// }
function min2(x, y) {
  return x > y ? y : x;
}

//result에는 56이 리턴되어야 함.
var result1 = min2(134, 56);
console.log(`result1: ${result1}`);


// 2번
// x를 min으로 설정하고 min보다 작으면 그 숫자가 min
function min3(x, y, z) {
  var min = x;
  if (min > y) {
    min = y;
  }
  if (min > z) {
    min = z;
  }
  return min;
}
// 셋중에 가장 작은 수 50이 result에 저장되어야 함.
var result2 = min3(120, 50, 99);
console.log(`result2: ${result2}`);



// 3번
// function isEven(n) {
//   if (n % 2 === 0) {
//     return true;
//   } else if (n === 0) {
//     return true;
//   } else {
//     return false;
//   }
// }
function isEven(n) {
  return n % 2 === 0;
}
// 숫자 1개를 전달하면 해당 숫자가 짝수인지 판별하는 함수
// 24를 전달하면 true리턴, 홀수를 전달하면 false리턴,
// 단, 0은 짝수취급
var result3 = isEven(10);
console.log(`result3: ${result3}`);
profile
백엔드 개발자
post-custom-banner

0개의 댓글