JavaScript.js#8関数式プログラミング


関数式プログラミングとは


関数式プログラミングはプログラミングモードであり、関数の組み合わせである.副手効果から離れて組合せ性を強調するプログラミングモード付随効果から遠ざかる原因は2つあります.
  • エラーを減らす
  • の組合せまたはモジュール化
  • JavaScriptで関数式プログラミングができるのは、関数が1レベルのオブジェクトであり、モジュールがサポートされているからです.

    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