[JS/Node]高次関数

14087 ワード

高次関数
パラメータ(パラメータ)として関数を受信し、関数として返される関数.
Achievement Goals
一級オブジェクト(first-class citizer)の3つの特徴を説明できます.高次関数(higher-orderfunction)について説明できます.JavaScriptで高次関数を記述できます.Advanced Challenges
考慮すべきテーマを学習し,TILを記述することができる.一級オブジェクト
JavaScriptで特別扱いされる対象
最も代表的な1級オブジェクトの1つは関数です.
n.関数
(javascriptが現れる時間を考慮して)javascriptでは、関数の特殊な処理は以下の通りです.
  • 変数に割り当てることができます.
  • の他の関数のパラメータ(パラメータ)に渡すことができます.
  • は、他の関数の結果として返すことができる.
  • 関数を変数に割り当てることができます.
    関数は、配列内の要素またはオブジェクトの属性値として保存できます.
    これは、データを処理するように関数(string、number、boolean、array、object)を処理できることを意味します.
    変数に関数を割り当てる場合:
    /*
     * 아래는 변수 square에 함수를 할당하는 함수 표현식입니다.
     * 자바스크립트에서 함수는 일급 객체이기 때문에 변수에 저장할 수 있습니다.
     *
     * 함수 표현식은 할당 전에 사용할 수 없습니다.
     * square(7); // --> ReferenceError: Can't find variable: square
     */
    
    const square = function (num) {
      return num * num;
    };
    
    // square에는 함수가 저장되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
    output = square(7);
    console.log(output); // --> 49
    함수 표현식は、変数に割り当てられた後に使用することができる.
    関数式(function expression)は호이스팅(Hoisting)には適用されません.
    関数宣言式のシースに依存しすぎると、コードのメンテナンスが容易ではありません.
    コードのレビューやデバッグを行うと、コードが上下に逆転する場合があります.
    関数は任意の場所で宣言できますが、関数の実行場所も重要ではありません.
    逆に,関数式の結果は関数の割り当てと実行位置に依存するため,コードの位置をある程度予測できる.
    シースを除いて、関数宣言式と関数式には大きな違いはありません.
    しかし、関数式では、関数が変数に格納できることをより明確に説明しています.
    関数は、変数に格納されたデータをパラメータとして受信したり、戻り値として使用したりすることができます.
    関数は変数にも格納できるので、パラメータとして関数を受信したり、戻り値として使用したりすることができます.
    高次関数
    関数は、パラメータargumentとして受信してもよいし、関数として返された関数であってもよい.
    コールバック関数
    別の関数callerに渡されるパラメータargumentの関数
    ライブラリ関数
    パラメータとして関数を受信
    高次関数パラメータとして別の関数を受信します.
    function triple(num) { 
    	return num * 3;
    }
    
    function tripleNum(func, num) { // tripleNum: 다른 함수(func)를 인자로 받는 고차함수
    	return func(num);  	// func: 콜백함수
    }
    
    console.log(tripleNum(triple, 3)); // 9
    				   // 함수 triple은 고차함수 tripleNum의 콜백함수
    高次関数関数を返すとき
    function add(num){ 	          // add: 다른 익명함수를 리턴하는 고차함수
    	return function (num2) {  // 익명함수: 콜백함수
          return num + num2;
        }
    }
    add(2)(3) 		 // add(2)는 함수임으로 ();를 함수 호출 연산자 ();를 사용할 수 있음
    	  		 // 5
    高次関数関数をパラメータとして受け取り、関数を返します.
    function double(num) {
      return num * 2;
    }
    
    function doubleAdder(added, func) {
      const doubled = func(added);
      return function (num) {
        return num + doubled;
      };
    }
    
    /*
     * 함수 doubleAdder는 고차 함수입니다.
     * 함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수입니다.
     * 함수 double은 함수 doubleAdder의 콜백으로 전달되었습니다.
     */
    
    // doubleAdder(5, double)는 함수이므로 함수 호출 기호 '()'를 사용할 수 있습니다.
    doubleAdder(5, double)(3); // -> 13
    
    // doubleAdder가 리턴하는 함수를 변수에 저장할 수 있습니다. (일급 객체)
    const addTwice3 = doubleAdder(3, double);
    addTwice3(2); // --> 8
    
    JavaScriptに高差関数を内蔵
    Achievement Goals
    アレイに高次関数filterが内蔵されていることは理解できます.filterの理解に基づいて,残りの高次関数を自分で学習することができる.
    forEach, find, filter, map, reduce, sort, some, every 抽象について説明できます.抽象的な観点から,高次関数が持つ利点を説明できる.高次関数を使用してプログラムを記述できます.1. map
    定義#テイギ#
    すべての要素が同じ動作を持つ値を返すすべての方法
    コールバック関数
    行動は私自身で作成し、함수で作成し、パラメータとして使用する必要があります.
    immutable
    既存のシナリオを変更しない
    リファレンスコード
    // let으로 선언된 배열 arr에 대하여
    let arr = [1, 2, 3]
    // map 메소드를 이용하여 모든 요소에게 동일하게 3을 곱해준 값을 반환하는 새로운 배열을 변수 result에 담는다.
    let result = arr.map((el) => el * 3)
    // result를 반환한다.
    return result;
    2. filter
    定義#テイギ#
    1つの方法では、すべての要素で私が望んでいる値だけをフィルタして返します.
    コールバック関数
    行動は私自身で作成し、함수で作成し、パラメータとして使用する必要があります.
    immutable
    既存のシナリオを変更しない
    リファレンスコード
    // let으로 선언된 배열 arr에 대하여
    let arr = [1, 2, 3]
    // filter 메소드를 이용하여 모든 요소 중 짝수인 값만 필터링하여 반환하는 새로운 배열을 변수 result에 담는다.
    let result = arr.filter((el) => el % 2 === 0);
    // result를 반환한다.
    return result
    3. reduce
    定義#テイギ#
    配列を値にする方法
    プロセス
    アレイ内の各要素
    特定の方法(関数)による
    あなたが望む形で
    凝縮する.(reduction)
    初期値が指定されていません.배열의 첫 번째 인덱스인 요소は「初期値」です.
    初期値は누적값(acc)の基礎である.
    次の要素から현재값(cur)です.
    「累積値」および「現在値」は、弊社の希望に応じて累積値に格納されます.
    このプロシージャを配列の最後のインデックス要素に繰り返します.
    返却する
    最後の누적값(acc)を返します
    リファレンスコード
    // let으로 선언된 배열 arr에 대하여
    let arr = [1, 2, 3]
    // reduce 메소드를 이용하여 원하는 행동에 의하여 누적값을 저장하는 과정을 배열의 길이만큼 반복하여 새로운 변수 result에 할당한다.
    let result = arr.reduce((acc, cur, idx) => { 
     						 acc + cur; 
    						 return acc;
    								}
    // result를 반환한다.
    return result
    Self Guided Lesson
    JavaScript配列法における高次関数(js array method)の学習forEach , find , filter , map , reduce , sort , some , everyfilterメソッドのコールバック関数はtruthyまたはfalseyを返すことができます.
    ただし、filterメソッドのコールバック関数を使用して、Deep equalityで条件を明確に説明することをお勧めします.
    したがって、コールバック関数は、内部条件に基づいて「真」(true)または「偽」(false)を返すことを推奨します.
    抽象化
    抽象化
    いくつかの複雑なものをコアのみを抽出する状態に圧縮します.
    (生産性向上)
    値レベル抽象
    値の受信と処理のみのレベル
    関数===値を受信し、値==を返す複雑な論理が隠されています==
    値レベルで抽象化
    事故レベル抽象**
    思考の抽象化:伝達関数(思考の束縛)の処理レベル