본문 바로가기

Hanghae99

221109 TIL Chapter 05 함수 첫번째 시간

05-1 함수의 기본 형태

함수는 "아무것이나 원하는대로 사용해도 된다."

코드를 작성하는데 정답은 없다. 코드를 실행하는데 문제가 없다면 어떤 형태로 사용해도 좋다.

 

익명함수

기본형태

function () {}

 

선언적 함수

// 함수에 이름을 붙임
function 이름() {

}

//다음과 같은 기능을 수행
let 이름 = function () {}

 

매개변수와 리턴값

기본 형태

function 함수(매개변수, 매개변수, 매개변수) {
    문장
    문장
    return 리턴값
}

 

기본적인 함수 예제

윤년을 확인하는 함수

4로 나누어 떨어지면 윤년

100으로 나누어 떨어지면 윤년X

400으로 나누어 떨어지면 윤년

윤년이면 true, 윤년이 아니면 false

    <script>
        let a = prompt('년도를 입력해주세요.', '')
		
        // 조건부 함수를 넣어 코드를 간단하게 구성
        function isLeapYear() {
            return (a % 4 === 0) && (a % 100 !== 0) || (a % 400 === 0)
        }
        // 100을 입력했을 경우: true && false || false 이므로 false
        // 400을 입력했을 경우: true && false || true 이므로 true
        // 4를 입력했을 경우: true && true || false 이므로 true
        // 1989를 입력했을 경우: false & true || false 이므로 false

        console.log(isLeapYear(a))


    </script>

 

A부터 B까지 더하는 함수 만들기

나의 시도한것:

1. 사용자가 a 와 b를 입력한다.

2. a부터 b까지의 값을 리턴한다.

그러나 실패 ㅜㅜ

    <script>
        let a = prompt('A를 입력해주세요', '')
        let b = prompt('B를 입력해주세요', '')

        function sumAll(a, b) {
            let ouput = '0'
            for (let i = a; i <= b; i++) {
                output += i
            }
            return output

        }

        console.log(`${a}부터 ${b}까지의 합: ${sumAll(a, b)}`)

    </script>

A부터 B까지 더하는 함수 정답

	<script>
      function sumAll(a,b) {
        let output = 0
        for (let i = a; i <= b; i++) {
          output += i
        }
      return output
      }

      console.log(`1부터 100까지의 합: ${sumAll(1, 100)}`)
      console.log(`1부터 500까지의 합: ${sumAll(1, 500)}`)
 	</script>

응용문제:

A부터 B까지 곱하는 함수

    <script>
        function timesAll(a, b) {
        	// 초기값이 0이면 어떤 수를 곱해도 0이므로, 초기값을 1로 설정
            let output = 1
            for (let i = a; i <= b; i++) {
                output *= i
            }
            return output
        }

        console.log(`1부터 5까지의 곱: ${timesAll(1, 5)}`)
        console.log(`1부터 10까지의 곱: ${timesAll(1, 10)}`)
    </script>

 

최솟값 구하는 함수 만들기

    <script>
      function min(array) {
      	// output = array[0] 은 output을 array의 0번째 값으로 설정한다는 의미
        let output = array[0]
        for (const item of array) {
          // 현재 output 보다 더 작은 item이 있다면
          if (output > item) {
            // output 값을 item으로 변경
            output = item
          }
        }
        return output
      }

      const testArray = [52, 273, 32, 103, 275, 24, 57]
      console.log(`${testArray}중에서`)
      console.log(`최솟값 = ${min(testArray)}`)
    </script>

 

최댓값 구하기로 변형

   <script>
        function max(array) {
            let output = array[0]
            for (const item of array) {
 
                if (output < item) {
                    output = item
                }
            }
            return output
        }

        const testArray = [52, 273, 32, 103, 275, 24, 57]
        console.log(`${testArray}중에서`)
        console.log(`최대값 = ${max(testArray)}`)
    </script>

 

나머지 매개변수

기본 형태

function 함수 이름(...나머지 매개변수) {}

예시

    <script>
      function sample(...items) {
        console.log(items)
      }
      
      sample(1,2)
      sample(1,2,3)
      sample(1,2,3,4)
    </script>

- 값이 배열로 들어온다

 

이를 이용하면 최솟값 구하기 함수를 아래처럼 변형할수 있다.

    <script>
      // 나머지 매개변수를 사용한 함수 만들기
      function min(...items) {
        // 매개변수 items는 배열처럼 사용합니다.
        let output = items[0]
        for (const item of items) {
          if (output > item) {
            output = item
          }
        }
        return output
      }

      // 함수 호출하기
      console.log('min(52,273,32,103,275,24,57)')
      console.log(`=${min(52,273,32,103,275,24,57)}`)
    </script>

 

나머지 매개변수와 일반 매개변수 조합하기

기본 형태

function 함수 이름(매개변수, 매개변수, ...나머지 매개변수) { }

매개변수의 자료형에 따라 다르게 작동하는 min()함수

    <script>
      function min(first, ...rests) {
        // 변수 선언하기
        let output
        let items

        // 매개변수의 자료형에 따라 조건 분기하기
        // Array.isArray() 메소드를 사용하여 배열인지 확인할 수 있다.
        // 배열인지 숫자인지에 따라 계산법이 달라진다.
        if (Array.isArray(first)) {
          output = first[0]
          items = first
        } else if (typeof(first) === 'number') {
          output = first
          items = rests
        }

        // 이전 절에서 살펴보았던 최솟값 구하는 공식
        for (const item of items) {
          if (output > item) {
            output = item
          }
        }
        return output
      }
	  
      //물론 결과는 같다.
      console.log(`min(배열): ${min([52,273,32,103,275,24,57])}`)
      console.log(`min(숫자, ...): ${min(52,273,32,103,275,24,57)}`)
    </script>

 

전개연산자

기본형태

함수 이름(...배열)

예시

 

총평

오늘 오전에 시험을 일찍 마치고 오후/저녁은 의성으로 저녁식사하러 갔다. 시험이 그다지 어렵지 않아서 다행이었고 이러 저러해서 원하는 기능을 구현할 수 있다는게 상당히 기쁘고 뿌듯한 일이다. 그래서 코딩이 점점 재밌어진다. 물론 아직 시작도 안한 단계이지만 이런 경험이 쌓이고 쌓여서 늘어가는것 아니겠는가.