[TS] 지금 들을 수 없는 고급 함수·카쿠화

18734 단어 TypeScript함수.tech

개시하다


평상시ReactReactNative를 사용하여 Web와 로컬 응용 개발을 진행한다.
이런 문제들을 다룰 때는'고급 함수'와'Karry화'같은 용어를 이해해야 할 정도로 많은 함수형 프로그래밍의 아이디어가 관련된다.
다른 사람에게 알려주면 그런 인상을 잡기 어려워 일단 추적 소스로 정리하려고 한다.
또 이 글에는 ReactReactNative를 사용하지 않는 사람을 위해'고급 함수'와'Karry화'설명에 기재돼 있다.
고위급 구성 요소에 대해서는 다른 기사에서 해설할 것으로 보인다.

1급 함수


고급 함수를 이해할 때'1급 함수'라는 단어를 미리 알 필요가 있다.
1급 함수 위키백과에는 다음과 같은 설명이 있습니다.
함수를 1급 대상으로 처리할 수 있는 프로그래밍 언어의 성질이나 이런 함수
1단계 대상은'생성, 대입, 연산, (매개 변수, 반환값으로) 교부'등 기본 조작을 무제한으로 사용할 수 있는 대상을 말한다.
여기의 중점은'(매개 변수, 반환값으로의) 인수인계'다.
즉, '1급 함수' 는 '함수' 를 '매개 변수와 되돌아오는 값' 의 함수로 이해할 수 있다.

고급 함수


고급 함수의 위키백과에는 다음과 같은 설명이 있습니다.
고급 함수는 1급 함수를 지원하는 프로그래밍 언어 중 적어도 다음 함수로 충분하다.
  • 함수(프로세스)를 매개 변수
  • 로 가져오기
    반환 함수

  • 즉'고급 함수'는'함수'를'매개 변수나 반환값, 또는 둘'로 처리하는 함수로 이해할 수 있다.
    함수가 매개 변수로 처리되는 경우JSTS의 세계적인 리셋 함수는 유명하다.
    const arr: number[] = [1,2,3];
    
    // forEach()は「nを引数に取る関数」を引数として受けているため高階関数である
    arr.forEach((n: number) => {
      console.log(n);
    });
    
    반대로 함수를 반환값으로 처리하는 경우는 다음과 같다.
    // counterFactory()は「cntをインクリメントしコンソール表示する関数」を戻り値とするため高階関数である
    const counterFactory = (): () => void => {
      let cnt: number = 0;
      return () => console.log(++cnt);
    }
    
    // counterFactory()を実行して関数を生成
    const counter1: () => void = counterFactory();
    const counter2: () => void = counterFactory();
    
    counter1(); // --> 1
    counter1(); // --> 2
    counter1(); // --> 3
    
    counter2(); // --> 1
    counter2(); // --> 2
    

    카리브화


    다음은 가리화다.
    카리브화는 상술한 고급 함수의 특성을 이용했다.
    카리브화의 위키백과에서 다음과 같이 설명한다.
    함수화(currying, 가리화=curried)란 여러 개의 매개 변수를 취한 함수를 함수로 설정하는 것을 말한다. 즉, 매개 변수는'원시 함수의 첫 번째 매개 변수'이고 되돌아오는 값은'원시 함수의 남은 매개 변수의 결과를 되돌려주는 함수'(또는 그 함수)이다.
    한마디로 여러 개의 매개 변수를 함수로 분할하는 것이다.
    이것이 무슨 편리한 점이 있다면, "매개 변수의 일부분만 고정시키고 함수를 복제할 수 있다."라고 말할 수 있다.이를 부분적 적용이라고 합니다.
    예를 들어, Request Target URL, Method, Paracture 3가지 매개 변수에 따라 비동기 처리fetch()를 수행하여 일반 함수를 만듭니다.
    const fetch = (url : string, method: 'POST' | 'GET', param : {}) => {
        // 3種類の引数を使って非同期処理を実行...
    }
    
    fetch를 사용할 때는 다음과 같이 호출해야 한다.
    // リクエスト①
    fetch('http://hogehogehogehoge', 'POST', { value: 'xxxx'});
    // リクエスト②
    fetch('http://fugafugafugafuga', 'POST', { value: 'xxxx'});
    // リクエスト③
    fetch('http://fugafugafugafuga', 'GET', {});
    
    이 경우 요청한 ①와 ②는 URL이 다를 뿐이다.또한 ②와 ③의 방법과 매개 변수는 다를 뿐이다.
    단지 일부 파라미터가 다르기 때문에 다른 파라미터도 반드시 다시 지정해야 한다. 이것은 불필요한 것이다.
    그곳에서 가리화를 진행하다.
    예를 들어 fetch를 되돌아오는 함수(고급 함수)로 고쳐 쓰면 고정 방법(부분 응용), 창설get 또는 post 등 함수를 만들 수 있다.
    const fetch = (method: 'POST' | 'GET') => {
        return (url : string, param : {}) => {
          // 3種類の引数を使って非同期処理を実行...
        }
    };
    
    const post: (url : string, param : {}) => void = fetch('POST');
    const get: (url : string, param : {}) => void = fetch('GET');
    
    post('http://hogehogehogehoge', { value: 'xxxx'});
    post('http://fugafugafugafuga', { value: 'xxxx'});
    get('http://fugafugafugafuga', {});
    
    URL과 매개 변수에 가산점을 주어 더 상세한 부분에 적용되는 함수를 만들 수 있다.
    const fetch = (method: 'POST' | 'GET') => (url: string) => (param: {}) => {
        return () => {
          // 3種類の引数を使って非同期処理を実行...
        }
    }
    
    const post = fetch('POST');
    const get = fetch('GET');
    
    const postHoge = post('http://hogehogehogehoge');
    const postFuga = post('http://fugafugafugafuga');
    const getFuga = get('http://fugafugafugafuga');
    
    const postHogeXXXX = postHoge({value: 'xxxx'});
    const postFugaXXXX = postFuga({value: 'xxxx'});
    const getFugaNoParam = getFuga({});
    
    postHogeXXXX();
    postFugaXXXX();
    getFugaNoParam();
    
    어느 정도까지 구체화하려면 실상과 상의를 해야 하지만 특정 파라미터가 고정된 상황을 자주 보면 가리화가 비교적 편리하다고 생각합니다.

    총결산


    이번에'고급 함수'와'카피 카페화'Typescript의 코드에 대해 해설을 진행하였다.ReactReactNative 개발할 때 이런'고급 구성 요소'를 사용합니다.
    그건 다음에 설명해 드리려고요.
  • 좋은 웹페이지 즐겨찾기