TIL-17、高次関数


高次関数、
名前も難しい高次関数!
今日はこいつを学ぼう!

高次関数とは?


パラメータ(パラメータ)として関数を受け入れることができます.
関数として返すことができる関数.
このとき、パラメータとして別の関数に渡される関数
コールバック関数と呼ばれます.
パラメータとして別の関数を受信します.
  function add(num) {
    return num + 2;
  }

  function addNum(func, num) {
    return func(num);
  }
前述したようにnumに2を加算する「add」関数があります.
パラメータとしてnumを受け入れる「add」関数があります.
このとき入力addNum(add, 4)「addnum」関数の最初のパラメータは「add」関数です.
return値によると、結果は4+2=6です.
関数を返すとき
  function adder(num1) {
    return function add(num2) {
      return num1 + num2;
    }
  }
上記のコードがあります.
この状態でadder関数を実行します.
「add」関数のみが返されます.
だからadder(1)(2);/3
またはlet add5 = adder(5)前述したように、関数自体を宣言します.add5(3) //8
このように関数を呼び出すことができます.
パラメータとして関数を受信し、関数を返します.
  function double(num) {
    return num * 2;
  }

  function doubleAdder(added, func) {
    const doubled = func(added);
    return function (num) {
      return num + doubled;
    }
  }
numには2を乗じた「double」関数があります.
パラメータとしてaddと関数を受け入れる関数では、
パラメータとして受信した関数に追加された関数を渡す
倍増を宣言する.
ここではnumがパラメータである匿名関数を実行します.
パラメータに戻り値として渡されるnumと宣言されたdouble
もっとやれば、
numに2を乗じた数値にnumを加えた値を返します.

内蔵高次関数


デフォルトでは、JavaScriptには
高次関数があります.
感謝の仕方を知りましょうfilter()->特定の条件を満たす要素をフィルタします.
(元のシナリオを変更しない)
[1,2,3]という名前の配列があります.この配列から2という名前の要素をフィルタしたい場合は、
[1, 2, 3].filter(arr => arr === 2);//[2].
[1, 2, 3].filter(arr => arr !== 2);//[1, 3].
上のように濾過できます.
矢印関数を使わない方法もあります.
[1, 2, 3].filter( function (arr) {
return arr === 2;
});//[2]
上記のように.
filterを使用した配列からのみ偶数を抽出
  let arr = [1, 2, 3, 4, 5, 6, 7, 8];

  arr.filter(num => num % 2 === 0);  
  // [2, 4, 6, 8]
map()->配列内の要素を条件に従って関数に変換します.
(元のシナリオを変更しない)
[1,2,3]という配列がありますが、この要素をすべて2に乗じたい場合は
[1, 2, 3].map(num => num * 2);//[2, 4, 6]
全部10を足したい時.
[1, 2, 3].map(num => num + 10);//[11, 12, 13]
上記のように交換できます.
すべての要素を必要な要素に変換する場合は、
[1, 2, 3].map(num => 5);//[5, 5, 5]
入力はuのようにすればよい.
mapを使用して整数5を乗算
  let arr = [1, 2, 3, 4];

  arr.map(num => num * 5);
  // [5, 10, 15, 20]
reduce万能.全部加算する.積み重ねる.これを使って地図を作ることができますが、
filter、sortもできます.
[1,2,3]の並びがあり、この数を全部足したいなら
[1, 2, 3].reduce((num1, num2) => num1 + num2);
//6 (1 + 2 + 3)
上記のように.関数の最後に開始点を指定できます.
例えば、以下のようになります.
[1, 2, 3].reduce((num1, num2) => num1 + num2, 5);
//11 (5 + 1 + 2 + 3)
reduceを使用して全体を乗算する
  let arr = [1, 2, 3];

  arr.reduce((num1, num2) => num1 * num2);
  // 6 (1 * 2 * 3)
私は本当にこれまで知られていた高次関数を埋め込む3つの方法をよく使っています.
利用される.私たちはよく理解しなければなりません.

プログラム化と宣言プログラミング

절차형 프로그래밍
どうしよう.
プログラム化プログラミング.
これは私が望んでいる結果をコードで実現する過程を重点とする方法です.
function add2(arr) {
  let result = [];

  for (let i = 0; i < arr.length; i++) {
    result.push(arr[i] + 2)
  }
  return result;
}
上記のコードに示すように、アレイ内の各要素に2を追加します.
繰り返し文を使用して、すべての配列要素にアクセスして計算する方法.선언형 프로그래밍
なんだ.
宣言プログラミングは、「必要なもの」を作成するために使用されます.
これはポイントの方法です.
プログラム化プログラミングにおけるコード
以下に示すように、宣言プログラミングで表すことができます.
  function add2(arr) {
    return arr.map(arr => arr + 2);
  }
上のコードはmap()の動作を示しています.
コードを記述するのではなく、組み込みの高差関数を使用します.
これはプログラム型プログラミング方式の抽象である.
見た目は視覚的ではないが、想像しにくい.
より高いレベルでプログラミングできます.