순수함수 vs 불순함수

Pure 함수와 Impure 함수라는 프로그래밍 언어에서 항상 듣는 두 용어입니다.
Pure Function는 항상 인수에 의존하며 부작용이 없어야 합니다.

부작용이란 무엇입니까? ☠️



함수에서 외부 코드를 사용하려고 하거나 변수를 변경하는 경우 부작용이 발생합니다.

예시:

let num = 10
function mul(val) {
    return num += val  
}


위 스니펫에서 볼 수 있듯이 mul 함수는 num 라는 외부 변수에 종속됩니다. 또한 값을 변경num하여 불순한 기능을 수행합니다.

간단한 예를 하나 더 확인해 보겠습니다.

function hello() {
  console.log("Hello Folks!");
}


그렇다면 위의 스 니펫에 대해 어떻게 생각하십니까? 🤔

.

.

.

응! 이것도 불순한 함수입니다 😵‍💫

JavaScript는 동기식이라는 것을 모두 알고 있듯이 `console`이나 `callback` 또는 `promise/fetch`를 사용하면 함수가 비동기식으로 됩니다.

여기서 Web API인 console 를 사용하면 순수하지 않은 기능이 됩니다.

예를 들어 다른 부작용을 확인해 봅시다.

  • DOM 조작, 콜백 또는 파일 읽기/쓰기

    function mul(a,b) {
        document.write("Started Multiplication")
        return a * b
    }
    console.log(mul(2,5))
    


  • 순수 함수에서 전역 변수 업데이트 또는 수정

    let x = 10
    
    function mul(a,b) {
        document.write("Started Multiplication")
        return a * b * x
    }
    console.log(mul(2,5))
    


  • 여기에서도 외부 변수에 의존하는 외부 변수를 변경합니다.

    let x
    
    function mul(a,b) {
        x = 10
        return a * b * x
    }
    console.log(mul(2,5))
    


  • 부작용에 대한 아이디어를 얻었으므로 Pure 및 Impure 기능을 이해합시다.

    순수 함수


  • 동일한 인수가 전달되면 항상 동일한 결과를 반환함
  • 프로그램 실행 중 상태/데이터/변경에 의존하지 않음
  • 항상 무언가를 반환합니다
  • .
  • 여기서는 테스트 케이스 작성이 간단합니다
  • .

    불순한 함수


  • 전달된 인수의 내부 상태 변경
  • 아무것도 반환하지 않고 적용될 수 있음
  • 부작용이 있을 수 있으므로 테스트 케이스 작성이 약간 복잡해집니다.

  • 순수한 방법과 불순한 방법



    다음은 순수한 방법입니다.
  • 어레이.맵()
  • 어레이.리듀스()
  • 어레이.필터()
  • 배열.concat()
  • ... (사본을 만드는 데 주로 사용되는 확산 구문)

  • 다음은 불순한 방법입니다.
  • Array.splice()
  • 배열.정렬()
  • 날짜.지금()
  • Math.random()

  • 보너스 포인트 🔖



    외부 상태를 순수 함수로 복제할 수 있습니다.

    외부 상태를 순수 함수로 복제해도 함수가 불순해지지 않습니다.

    예시:

    let name = ["suprabha", "supi"]
    
    function fullName(newName, name) {
      let clonedName = [...name]
      clonedName[clonedName.length] = newName
      return clonedName
    }
    
    console.log(fullName("sumi", name)) // ['suprabha', 'supi', 'sumi']
    


    위 스니펫에서는 ... 함수에서 fullName 스프레드 연산자를 사용하고 있습니다. 복제본을 만든 다음 업데이트합니다. 따라서 name 변수에 의존하지 않습니다.

    게시물을 읽어 주셔서 감사합니다!

    이 기사가 도움이 되었기를 바랍니다. 질문이 있으시면 언제든지 댓글 섹션에 남겨주시거나 여기로 저에게 연락해 주세요 👇




    🌟


    📚 Ebooks


    🌟

    좋은 웹페이지 즐겨찾기