[TIL] Day-7
23481 ワード
javascript Es 6に基づく関数式プログラミングを学びました.
初めて関数式のプログラミングを勉強して、理解するのに多くの時間を費やしました.
私から見れば、最も重要なのは、どのパラメータにどの戻り値が含まれているかを把握し、利用することです.
関数の実行文は、値であってもよいし、関数自体であってもよい.
この2つの関数の評価はまったく異なるので,その関数が何を返しているのかよく理解しなければならない.
関数をネストして連続的に実行しながら値として計算します.
最後の事柄を処理する方法で符号化する.関数型コードを読むとき 関数型コード作成時
コードは で適切な形式で計算されます.
go,pipe,curry関数は関数型プログラミングコードの表現力を向上させることができる.
関数式プログラミングコードを読みやすくする関数. は、関数およびパラメータを直ちに伝達し、値を直ちに評価するために使用される. の値を返します. 初期値は引数として渡され、渡された引数で計算された戻り値は次の関数の引数となる.
◇ を繰り返し、関数実行後に戻った値を後続の関数のパラメータに入れる関数の関数を返します. はすぐに実行されず、返された関数を実行する必要があります. に必要な初期パラメータを加えると、内部で n個の関数を連続的に実行し、収縮した関数を作成して返します.
希望する時点(条件)での値を持つ関数を実行する関数です. 関数をパラメータとして関数を返します. 必要に応じてエンクロージャのパラメータ(変数、関数)を書き込みます. まずパラメータを入れ、次のパラメータが入ったときに実行します. どうして書くの?
go,pipe関数を用いると,パラメータとしての関数を簡略化し,読みやすくすることができる.
重複する関数を別の関数に変更して、効率的に使用できます.
既存の関数を保持する場合は、次の操作を行います.
→変数に直接入れて使う.
コンパクトな関数を交換したい場合は、それを使用します.
→パラメータを返す関数を操作するためにパラメータを受け入れる新しい関数を作成して割り当てます.
授業を受けるのは最初は簡単だと思っていましたが、後になるほど脳が混乱します.
go、pipeもそうですが、特にcurry...
関数式プログラミングの観点から,単純明瞭に見えるが,その実現過程は非常に困難で複雑である.
第1週目の作業では、資料の構造を完全に理解していないため、結果は満足できないので、第2週目には、概念と原理を完全に理解し、課題を体現したいと思います.しかし、すべてのことが過去を理解しようとしたので、時間がかかりすぎた.
課題の期限が決まっているため、時間管理をある程度柔軟に学ぶことができます.
やるべきことができた
初めて関数式のプログラミングを勉強して、理解するのに多くの時間を費やしました.
私から見れば、最も重要なのは、どのパラメータにどの戻り値が含まれているかを把握し、利用することです.
関数の実行文は、値であってもよいし、関数自体であってもよい.
この2つの関数の評価はまったく異なるので,その関数が何を返しているのかよく理解しなければならない.
関数プログラミングとは?
関数をネストして連続的に実行しながら値として計算します.
最後の事柄を処理する方法で符号化する.
오 -> 왼
왼 -> 오
位置(パラメータ)にどのような形式の値を含めるべきかを決定します.コードは
const products = [
{ name: '반팔티', price: 15000 },
{ name: '긴팔티', price: 20000 },
{ name: '핸드폰케이스', price: 15000 },
{ name: '후드티', price: 30000 },
{ name: '바지', price: 25000 },
];
log(reduce( //2만원 이하의 상품들의 값을 합친 값
add,
map(p => p.price,
filter(p => p.price < 20000, products))));
コードを値として扱う
go,pipe,curry関数は関数型プログラミングコードの表現力を向上させることができる.
go
◇
const go = (...args) => reduce((a, f) => f(a), args);
go (
products, // 시작 liter
products => filter(p => p.price < 20000, products),
products => map(p => p.price, products),
prices => reduce(add, prices),
console.log);
pipe
go()
が実行されます.const pipe = (...fs) => (a) => go(a, ...fs); // 함수를 반환하는 함수
const f = pipe(
a => a + 1,
a => a + 10,
a => a + 100);
console.log(f(0));
--------------------------------------------------
// 초기 값을 함수의 반환 값으로 하고싶다면?
const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs);
const f = pipe(
(a, b) => a + b,
a => a + 10,
a => a + 100);
console.log(f(0,1));
curry
希望する時点(条件)で
go,pipe関数を用いると,パラメータとしての関数を簡略化し,読みやすくすることができる.
const curry = f => (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);
const map = curry((f, iter) => { // 함수를 할당할 때 query에 한 번 싸아서 넣는다
let res = [];
for (const a of iter) {
res.push(f(a));
}
return res
});
// filter, map, reduce를 curry의 인수에 넣었다고 할 때,
// 1단계
go (
products, // 시작 liter
products => filter(p => p.price < 20000, products),
products => map(p => p.price, products),
prices => reduce(add, prices),
console.log);
// 2단계
go(
products,
products => filter(p => p.price < 20000)(products),
filteredProducts => map(p => p.price)(filteredProducts),
prices => reduce(add, prices)(prices),
console.log);
// 3단계
// 인자 리스트로 함수가 들어가 있으면 자동적으로
// 인자가 들어가고 결과 값 반환되어 다음 함수의 인자로 넘겨진다
go(
products,
filter(p => p.price < 20000), // (..._) => f(p => p.price < 20000, ..._)와 같다
map(p => p.price)
reduce(add, prices),
console.log);
整数の組み合わせによる関数の作成
重複する関数を別の関数に変更して、効率的に使用できます.
const pipe = (...fs) => (a) => go(a, ...fs);
const totalPrice = pipe(
map(p => p.price,
reduce(add, prices)
)
const baseTotalPrice = predi => pipe(
filter(predi),
totalPrice,
)
go(
products,
baseTotalPrice(p => p.price < 20000),
console.log);
go(
products,
baseTotalPrice(p => p.price >= 20000),
console.log);
既存の関数を新しい関数に結合する場合、既存の関数を保持する場合は、次の操作を行います.
→変数に直接入れて使う.
コンパクトな関数を交換したい場合は、それを使用します.
→パラメータを返す関数を操作するためにパラメータを受け入れる新しい関数を作成して割り当てます.
授業を受けるのは最初は簡単だと思っていましたが、後になるほど脳が混乱します.
go、pipeもそうですが、特にcurry...
関数式プログラミングの観点から,単純明瞭に見えるが,その実現過程は非常に困難で複雑である.
第1週目の作業では、資料の構造を完全に理解していないため、結果は満足できないので、第2週目には、概念と原理を完全に理解し、課題を体現したいと思います.しかし、すべてのことが過去を理解しようとしたので、時間がかかりすぎた.
課題の期限が決まっているため、時間管理をある程度柔軟に学ぶことができます.
やるべきことができた
Reference
この問題について([TIL] Day-7), 我々は、より多くの情報をここで見つけました https://velog.io/@yooon26/TIL-Day-7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol