[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.)