제6장 귀속

2416 단어
이 장은 과도적인 장으로 사고 함수에서 더욱 깊은 차원의 함수식 스타일로 매끄럽게 사고하는 데 목적을 둔다.

6.1 자체 흡수 함수(자신의 함수를 호출)


역사적으로 볼 때, 귀속과 함수식 프로그래밍은 말하지 않을 수 없는 연원을 가지고 있다. 또는, 그것들은 항상 함께 소개된다.그러나 우리는 이해귀환이 주어와 함수식 프로그래밍을 이해하는 데 세 가지 이유가 있다고 말한다.
  • 귀속적인 해결 방안은 일반적인 문제 서브집합에 대한 단일 추상적인 사용을 포함한다.
  • 귀속은 가변 상태를 숨길 수 있음
  • 귀환은 게으름과 무한한 구조를 실현하는 방법이다.

  • 다음 설명과 차이점을 살펴보겠습니다.
    예를 들어 myLength가 배열을 받아서 그 길이를 되돌려 주는 함수를 고려한다면, 함수의 설명은 다음과 같다.
  • 0부터 수조의 크기를 계산한다.
  • 원소를 옮겨다니며 원소의 크기(size)에 1을 추가합니다.
  • 가 그룹의 끝까지 옮겨다니면 그룹의 크기 (size)가 그 길이 (length) 이다.

  • 그러면 돌아가는 사고방식이 어떤지 살펴보자.
  • 만약 수조가 비어 있다면 0으로 돌아가야 한다.
  • 그룹의 나머지 부분에 결과를 myLength에 추가합니다.

  • 즉,
    function myLength(array) {
    
     if(_.isEmpty(array)) return 0;
     
     return 1 + myLength(_.rest(array))
    }
    

    우리는 여기에서 그 두 가지lodash의 방법을 고려하지 않는다. 우리는 그 사고방식이 어떤지 이해해야 한다. 물론, 만약 당신이 우리가array를 직접 사용한다고 말한다면.length, 그럼 나도 할 말이 없어.이어서 우리는 이러한 상황을 고려하여 함수 zip을 실현하고 출력의 결과는 다음과 같다.
    zip(['a', 'b', 'c'], [1, 2, 3]) ==> [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
    

    일반적으로lodash의 원본 코드를 보면 다음과 같은 함수를 쓴다.
    function zip(array1, array2) {
    
     const length1 = array1.length;
     const length2 = array2.length;
     if(length1 !== length2) return;
    ​
     const result = [];
     let i = -1;
    ​
     while (++i < length1) {
       result[i] = [array1[i], array2[i]];
     }
    ​
     return result;
    }
    

    우리의 일반적인 사고방식은 순환을 이용하여 그것을 처리하는 것이다. 그러면 지금 우리는 귀속을 사용해야 합니까?
    분명히 귀환은 이런 수를 조작하는 데 쓰이는 것이 아니다.
    계승 기억나세요?즉 0! = 1,2! = 1 * 2,n! = 1 * 2 * 3 * ··· * n귀속은 이렇게 쓰인다.
    function fact(n) {
    
     return n <= 0 ? 1 : n * fact(n - 1);
    }
    ​
    fact(5); // 120
    

    눈치챘어?귀환의 사용 장면은 함수 자체를 호출해서 출력을 할 수 있을 때 귀환을 사용해야 한다.
    주의: 귀속을 사용할 때 정지 조건을 반드시 설정해야 합니다. 그렇지 않으면 창고가 넘칠 수 있습니다.
    여기에 또 하나의 개념인 미귀속을 언급한다.
    꼬리 귀속은 모든 원소를 귀속 호출할 때 이 함수의 마지막 동작이 귀속 호출이면 꼬리 귀속이라고 부른다.
    흥미가 있으면 스스로 조회해 보세요.
    귀속은 대상과 그룹에 자주 사용되는데, 이것은lodash에서 나타난다.
    Github
    그러나 우리는 귀속을 밑바닥 조작으로 더 많이 볼 것이다.즉, 더 좋은 방법이 없을 때 귀속 사용량을 줄여야 한다. 자바스크립트 엔진 최적화 문제도, 창고가 넘쳐나는 문제도, 이해가 쉽지 않기 때문이다.

    총결산


    이 절은 귀속, 즉 함수가 간접적으로 또는 직접적으로 자신을 호출하는 것을 말한다.
    자동 귀속 호출은 삽입된 데이터 구조를 검색하고 처리하는 강력한 도구이지만, 이 말은 귀속을 조심스럽게 사용한다. 왜냐하면 귀속은 때때로 고급 함수가 그렇게 직접적으로 오지 않기 때문이다.
    현재 우리의 보편적인 인식은 여전히 함수 조합을 사용하고 필요할 때만 귀속이라는 기술 조작을 사용한다.

    좋은 웹페이지 즐겨찾기