[TS] 지금 들을 수 없는 고급 함수·카쿠화
18734 단어 TypeScript함수.tech
개시하다
평상시
React와 ReactNative를 사용하여 Web와 로컬 응용 개발을 진행한다.이런 문제들을 다룰 때는'고급 함수'와'Karry화'같은 용어를 이해해야 할 정도로 많은 함수형 프로그래밍의 아이디어가 관련된다.
다른 사람에게 알려주면 그런 인상을 잡기 어려워 일단 추적 소스로 정리하려고 한다.
또 이 글에는
React과ReactNative를 사용하지 않는 사람을 위해'고급 함수'와'Karry화'설명에 기재돼 있다.고위급 구성 요소에 대해서는 다른 기사에서 해설할 것으로 보인다.
1급 함수
고급 함수를 이해할 때'1급 함수'라는 단어를 미리 알 필요가 있다.
1급 함수 위키백과에는 다음과 같은 설명이 있습니다.
함수를 1급 대상으로 처리할 수 있는 프로그래밍 언어의 성질이나 이런 함수
1단계 대상은'생성, 대입, 연산, (매개 변수, 반환값으로) 교부'등 기본 조작을 무제한으로 사용할 수 있는 대상을 말한다.
여기의 중점은'(매개 변수, 반환값으로의) 인수인계'다.
즉, '1급 함수' 는 '함수' 를 '매개 변수와 되돌아오는 값' 의 함수로 이해할 수 있다.
고급 함수
고급 함수의 위키백과에는 다음과 같은 설명이 있습니다.
고급 함수는 1급 함수를 지원하는 프로그래밍 언어 중 적어도 다음 함수로 충분하다.
반환 함수
즉'고급 함수'는'함수'를'매개 변수나 반환값, 또는 둘'로 처리하는 함수로 이해할 수 있다.
함수가 매개 변수로 처리되는 경우
JS와 TS의 세계적인 리셋 함수는 유명하다.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의 코드에 대해 해설을 진행하였다.React와ReactNative 개발할 때 이런'고급 구성 요소'를 사용합니다.그건 다음에 설명해 드리려고요.
Reference
이 문제에 관하여([TS] 지금 들을 수 없는 고급 함수·카쿠화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nekoniki/articles/5b7980fac91048775931텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)