JavaScript.js#8関数式プログラミング
20667 ワード
関数式プログラミングとは
関数式プログラミングはプログラミングモードであり、関数の組み合わせである.副手効果から離れて組合せ性を強調するプログラミングモード付随効果から遠ざかる原因は2つあります.
reduce実施
関数プログラミングの例としてreduce関数を作成します.
EX
function sum(arr) {
const len = arr.length;
let sum = 0;
for (let i = 0; i < len; i++) {
sum += arr[i];
}
return sum;
}
const arr = [1, 2, 3, 4];
console.log(sum(arr)); // 10
上のコードは関数で、配列を通じて各要素の和を求めます.もちろん、ES 6構文のreduce関数を使用することができますが、for構文を使用して関数式プログラミングの例を実装しました.
今回は、すべての関数を乗算し、加算または乗算するreduce関数を作成します.
EX
function multiply(arr) {
const len = arr.length;
let sum = 0;
for (let i = 0; i < len; i++) {
sum *= arr[i];
}
return sum;
}
const arr = [1, 2, 3, 4];
console.log(sum(arr)); // 24
乗算された関数と乗算された和の関数の違いは、演算子が「+」か「*」かです.reduce
const sum = (x, y) => x + y;
const multi = (x, y) => x * y;
function _reduce(func, arr, initial) {
const len = arr.length;
let sum = initial;
for (let i = 0; i < len; i++) {
sum = func(sum, arr[i]);
}
return sum;
}
const arr = [1, 2, 3, 4];
console.log(_reduce(multi, arr, 1)); // 24
console.log(_reduce(sum, arr, 0)); // 10
加算された関数と、乗算された関数が多いことを作成しました.次に,パラメータとして関数を演算する関数を作成した.その結果,コードは以前よりも少なく,モジュール化が可能になった.ここでマイナス記号演算を行う場合は、miunsという関数を作成できます.カードリング
関数プログラミングの典型的な例は、「トリム」です.高次関数とも呼ばれます.
ES 6構文を使用して関数プログラミングを実装しましょう.
const dogs = [
{
name : 'max',
weight : 10,
location : 'seoul',
color : 'black',
},
{
name : 'big',
weight : 90,
location : 'seoul',
color : 'black',
},
{
name : 'shy',
weight : 40,
location : 'busan',
color : 'brown',
},
]
次のdogs配列があるとします.条件に合った犬の名前を返します
brownの色を持つ子犬の名前の関数を返します.
function getDogs(dogs, filter) {
const [key, value] = filter;
return dogs.filter((dog) => dog[key] === value).map((dog) => dog["name"]);
}
const dogName = getDogs(dogs, ["color", "brown"]);
console.log(dogName); // ["shy"]
この関数は良いですが、残念ながらフィルタ条件は多くありません.色がbrownの犬だけが見つけられるからいろいろ条件を入れましょうconst weightCheck = weight => dog => dog['weight'] < weight
function getDogs(dogs, filterFunc) {
return dogs.filter(filterFunc).map((dog) => dog["name"]);
}
const dogName = getDogs(dogs, weightCheck(50));
console.log(dogName); // ["max", "shy"]
Curringを用いてweightCheck関数を作成した.この関数は、重量の値を受け入れ、重量未満の子犬をフィルタします.今回は、重量、領域、色ではなく名前を検索するcuring関数を作成します.
const check = (field) => (value) => (dog) => dog[field] === value;
function getDogs(dogs, filterFunc) {
return dogs.filter(filterFunc).map((dog) => dog["name"]);
}
const colorCheck = check("color");
const locationCheck = check("location");
const dogNameByColor = getDogs(dogs, colorCheck("black"));
const dogNameByLocation = getDogs(dogs, locationCheck("busan"));
console.log(dogNameByColor); // ["max", "big"]
console.log(dogNameByLocation); // ["shy"]
上記の例に示すように、異なるパラメータは、異なる関数プログラミングを実現することができる.の最後の部分
理想的な関数式プログラミングを理解しました!
パラメータとして1レベルのオブジェクトのプロパティ(関数と呼ばれる値)を使用して論理を実装する例は、実際のプロジェクトでも役立ちます.
ソース
JavaScriptコーディング技術
ライブJavaScript
Reference
この問題について(JavaScript.js#8関数式プログラミング), 我々は、より多くの情報をここで見つけました
https://velog.io/@chkim132/자바스크립트.js-8-함수형-프로그래밍
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(JavaScript.js#8関数式プログラミング), 我々は、より多くの情報をここで見つけました https://velog.io/@chkim132/자바스크립트.js-8-함수형-프로그래밍テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol