Javascript를 사용하여 기본 함수 프로그래밍

함수식 프로그래밍 - 응, 재미있어 - 하지만 사실 나는 이 주제에 대해 아무것도 몰라...그럼, 본문을 전면적으로 읽는 것을 환영합니다.
  • 함수식 프로그래밍이 어떻게 작동하는지에 대한 기본 지식을 제공합니다.
  • 함수식 프로그래밍의 기본 구성 요소
  • 은 흔히 볼 수 있는 대상 프로그래밍과 무엇이 다른가.
  • 우리 진짜 시작합시다!

    기본 함수 프로그래밍 지식


    이를 위해, 우리는 우선 함수식 프로그래밍이 어떻게 정의되었는지 이해해야 한다.이에 대한 설명은 사실 매우 간단하다.
    "함수식 프로그래밍(일반적으로 FP로 약칭)은 순수 함수를 조합하여 공유 상태를 피하고 가변 데이터와 부작용을 피하여 소프트웨어를 구축하는 과정이다."에릭 엘리엇(JavaScript 인터뷰 파악: 함수 프로그래밍은 무엇입니까?)
    좋아요.그래, 유행어가 너무 많아!우리는 이 문장을 중요한 부분에 따라 신속하게 분해한 후에 다음과 같은 결론을 얻어야 한다.
  • 순수함수

  • 그것은 기본적으로 언제든지 주어진 입력에 대해 같은 출력을 가진다는 원칙을 따른다.
    이런 행위를 함수의 결정론이라고도 부른다.따라서 정상 함수는 입력과 출력을 계산하는 것이 사실이지만 전역 변수 내의 변화나 일부 부작용으로 인해 이러한 입력과 출력은 언제든지 같지 않다.
    순수 함수tho의 요구는 일반 함수와 같지만, 다른 것은, 전역/외부 상태에 접근할 수 없기 때문에, 주어진 입력과 일치하고, 같은 출력을 따른다는 것이다.(일대일 관계처럼)
  • 공유 상태 피하기
  • 함수 간에 공유 상태가 없습니다.그래서 함수 A는 함수 B에서 무엇을 했는지 알고 주위의 상황도 알지 말아야 한다.전역 상태를 사용하는 것도 아니다.
  • 가변 데이터 피하기
  • 데이터를 사용할 때 데이터를 수정해서는 안 된다.더 흔히 볼 수 있는 함수식 프로그래밍 언어에서 값은 메모리로 복제되어 새 대상으로 되돌아옵니다.이러한 불변 데이터를 지원하기 위해javascript는 다음과 같은 기능을 제공했다. Map, Reduce, RightReduce, filter...
  • 부작용 피하기
  • 예를 들어 어떤 곳에서 텍스트 파일을 읽는 것에 의존하면 부작용이 생길 수 있다.파일의 내용은 쉽게 변경할 수 있기 때문에 사용자가 주의하지 않은 상황에서 큰 차이 (즉 부작용) 를 일으킬 수 있습니다.
    namespace studentExample {
      const costPerStudentPerMonth: number = 200;
      const months: number = 2;
      const students: Array<{ name: string }> = [
        {
          name: 'lulu'
        },
        {
          name: 'lala'
        },
        {
          name: 'lili'
        },
        {
          name: 'lele'
        }
      ];
    
      //normal function
      // + side effects, when changing any variable
      // + relying on a shared state
      const calculateStudentsCost = (students: Array<{ name: string }>) =>
        `${students.length * costPerStudentPerMonth * months} $`;
    
      // pure function
      // - side-effects, same input = same output!
      // - no shared state
      const pureCalculateStudentsCost = (studentsCount: number) => (
        monthsToCalculate: number
      ) => (costPerStudentPerMonth: number) =>
        `${studentsCount * costPerStudentPerMonth * monthsToCalculate} $`;
    
      console.log(calculateStudentsCost(students)); // 1600 $
      console.log(pureCalculateStudentsCost(students.length)(months)(costPerStudentPerMonth)); // 1600 $
    }
    
    
    함수식 프로그래밍을 사용하는 가장 큰 단점 중 하나는 모든 내용이 더 지루해지고 이해하기 어려울 수도 있다는 것을 알 수 있습니다.대상을 향한 방법을 사용함으로써 당신의 뇌는 좋은 훈련을 거쳐 어떤 개념을 이해할 수 있다.
    예를 들어 만약 누군가가 하나의 임무를 제기하여 원의 직경과 둘레를 계산한다면, 대부분의 사람들은 대상을 향한 방법을 선택할 것이다. 왜냐하면 그것은 이해하기 쉽기 때문이다.우선,circle 클래스를 만듭니다. 이 클래스는 모든 필요한 클래스 변수와 숫자를 계산하는 데 필요한 방법을 가져옵니다.
    경험에 의하면 함수를 선택하는 사람은 매우 드물다. 왜냐하면 이렇게 하면 감각이 그다지 자연스럽지 않기 때문이다. 그러나 나도 수학 함수는 매우 좋은 예로 함수 방법으로 투영할 수 있다는 것을 알아차렸다.위의 원형 예제를 사용해 보겠습니다.
    
    namespace circleExample {
    
      // diameter = radius * 2
      const circleDiameter = (radius: number) => radius * 2;
    
      // Circumference = π × Diameter
      const circumferenceWithDiameter = (diameter: number) => Math.PI * diameter;
    
      // Circumference = π × radius × 2
      const circumferenceWithRadius = (radius: number) => Math.PI * radius * 2;
    
      // area = π × radius ** 2
      const areaWithRadius = (radius: number) => Math.PI * radius ** 2;
    
      // Example calculation
      console.log(areaWithRadius(4))
      console.log(circumferenceWithDiameter(circleDiameter(4)))
    }
    
    
    나에게 있어서 이것은 매우 실용적이고 읽을 수 있는 것 같다. 왜냐하면 너는 함수와 입력만 읽을 수 있기 때문이다.너는 코드를 보지 않아도 그곳에서 무슨 일이 일어났는지 알 수 있다.이 특정한 프로젝트 예시를 제외하고math는 시종 좋은 예시로 함수식 프로그래밍의 강력한 기능을 보여 준다.
    이외에, 당신은 주의했습니까? 우리의 프로그래밍 예시에서 우리는 어떠한 변수도 바꾸지 않았습니다. 이것은 함수 프로그래밍을 사용하는 좋은 효과입니다.
    마지막으로 나는 네가 독서에서 약간의 지식을 얻을 수 있기를 바란다. 나도 네가 개인이나 업무 관련 항목을 다시 접촉할 때 이 점을 명심하기를 바란다.이것은 함수식 프로그래밍 모델에 대한 매우 기본적인 이해일 뿐이며, 이 점에 대해서는 아직도 많은 탐색이 필요하다.더 심도 있는 연구가 가능한지 확인하기 위해 언제든지 피드백을 남겨 주십시오.:)

    좋은 웹페이지 즐겨찾기