かんすうしきプログラミング


関数式プログラミングを理解するには、まずプログラミングのパターンを理解する必要があります.
理由は?これまで知っていたオブジェクト向けプログラミングと今回知っておきたい関数式プログラミングはプログラミングの範式の一つだったからです.
プログラミングパターン
  • プログラム設計モデル(Programming Paradigm)は、プログラマにプログラミングの観点を確立させ、コードの作成方法を決定することができる.新しいプログラミングモードでは、新しい方法で考え、それに基づいてコードを書く方法を学びます.

  • コマンドプログラミング:何を表示するのではなく、どのように実行するかを説明します(What)
  • プロシージャ向けプログラミング:
  • 実行する必要があるシーケンス処理プロシージャ(C、C+)を含む
  • オブジェクト向けプログラミング:オブジェクト表示プログラムのインタラクション(C++、Java、C#)
  • のセットを介して

  • 宣言プログラミング:どのようにするかではなく、何をするかを説明します(How).
  • 関数式プログラミング:純粋な関数とソフトウェアの作成方法(モジュール、Haskel、Rep)
  • を組み合わせる.

  • 宣言プログラミングの例
  •  const newArr = [];
    for (let i = 0; i < arr.length; i++) {
      if (arr[i].length !== 0) {
        newArr.push(
          arr[i].charAt(0).toUpperCase() + arr[i].substring(1)
        );
      }
    }
  • 関数式プログラミング例
    function convert (s) {
    return s.charAt(0).toUpperCase() + s.substring(1);
    }
    const newArr2 = arr
    .filter(v => v.length !== 0)
    .map(v => convert(v));
  • かんすうしきプログラミング

  • 命令式プログラミングは「どのように」(How)、宣言式プログラミングは「何をするか」(What)を表す.

  • 関数式プログラミングは、プログラミング言語や方法を学ぶのではなく、関数でプログラミングする思考を学ぶと言える.
    つまり、新しい計算方法を学ぶように、思考を転換する必要があります.異なる観点から、プログラミングはより柔軟なトラブルシューティングを提供します.

  • コマンドプログラミング比較

  • 関数式プログラミングとは、計算を数学関数の組合せと見なすことである.これは、関数が通常のプログラミング言語で特定の操作を実行する役割を果たすのとは逆に、関数の値を変更することはできません.
    関数プログラミングに必要な概念
  • 一級オブジェクト
  • 高次関数
  • 不変性
  • 純関数
  • データ変換方法
  • 合成関数
  • 一級オブジェクト
  • レベルのオブジェクトは、次の条件を満たします.
  • 変数またはデータ構造に含めることができる.
  • パラメータで渡すことができます.
  • の戻り値(戻り値)として使用できます.
  • アサイメントで使用される名前にかかわらず、固有の区別を行うことができます.
  • はコミッションを動的に割り当てることができます.
  •   자바스크립트에서 함수(Function)은 객체(Object)이므로 1급 함수로 불린다.
    高次関数
  • Ramdaアルゴリズムによって生成された以下の条件を満たす関数
    関数はパラメータとして
  • 関数に渡すことができる.
  • 関数は、
  • 関数の戻り値として使用できます.
    高次関数は1次関数のサブセットです.
  • 리액트의 고차 컴포넌트(HOC)는 컴포넌트를 사용하여 위의 조건을 만족하는 컴포넌트를 말한다.
    ふへんせい
  • 関数式プログラミングでは、データは不変性データと呼ばれる可変である.(JavaScriptは一部の言語で使用できますが、使用できません)
  • のデータを変更する必要がある場合は、元のデータ構造を変更せずにデータのコピーを作成し、変更後のコピーを使用して操作します.
  • const 키워드와 불변은 구분해야 한다. const는 Object로 사용되는 경우 변경 가능하다.
    じゅんかんすう
  • 純関数は、関数型プログラミングに必要な概念であり、以下の条件を満たす関数を指す.
  • の同じ入力の場合、常に同じ値を返さなければなりません.
  • 関数の実行はプログラムの実行に影響しないでください.(Side効果なしでなければならない
    たとえば、関数でパラメータ値またはプログラムステータス
  • を変更します.
    순수 함수를 호출하면 프로그램의 어떠한 변화도 없고, 입력 값에 대한 결과를 예상할수 있어서 테스트하기가 쉽다.
    データ変換方法
  • 関数プログラミングではデータを変更できないため、既存のデータのコピーを作成するためのツールが必要です.
  • JavaScriptには既にArrayがあります.map, Array.reduceなどのデータコピーを作成する関数を提供します.
  • ごうせいかんすう
  • 合成関数とは、新しい関数を生成または計算するために2つ以上の関数を組み合わせるプロセスを指す.関数型プログラムは、複数の小さな純粋な関数から構成されるため、これらの関数を連続的または並列に呼び出してより大きな関数を作成するプロセスによってプログラム全体を構築する必要がある.
  • メソッド合成関数
  • のフィルタリング
    ソース
    https://velog.io/@kyusung/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9A%94%EC%95%BD
    なぜ関数式プログラミングを使うのですか?
  • の利点
  • は、高レベル抽象
  • を提供する.
  • 関数単位のコード再利用が容易
  • 指向
  • は不変であるため、プログラムの動作
  • を容易に予測できる.
    John Hughesは1990年に書いた「Why Functional Programming Matters」で次のように説明した.
    関数型プログラムには文が代入されておらず、変数に値を付けると絶対に変更されません.
    より一般的には,関数型プログラムには全く副作用がない.関数呼び出しは、関数の結果を計算する以外に効果がないため、エラーの主な原因を解消することができ、関数の実行順序は重要ではありません.
    式(expression:これは関数の組合せと考えられる)その式は、副作用で変更できる結果がないため、いつでも実行できます.これにより、フロー制御を指定するプログラマーの負担が軽減されます.
    式はいつでも実行できるので、変数をその値に置き換えることができます.逆も同様です.これらのプログラムについては、「参照透明性がある」と呼ばれます.これらの特性により,関数型プログラムは既存の他のプログラムよりも数学的に処理しやすい.
    ソース:http://ruaa.me/why-functional-matters/
    かんすうしきプログラミングほう

  • arr.forEach(callback)
    パラメータの転送ぱらめーたのてんそう:繰り返し実行する関数くりかえしじっこうするかんすう
    配列の長さに等しい操作を繰り返します.
    戻り値なし
    コールバック関数のパラメータ順序:現在のエンティティ(値)、インデックス(インデックス)、ソース配列(配列)を順番に並べます.

  • arr.map(callback)
    パラメータの転送ぱらめーたのてんそう:繰り返し実行する関数くりかえしじっこうするかんすう
    コールバック関数には、新しい配列の要素になるコールバック値が必要です.
    コールバック関数のパラメータ順序:現在のエンティティ(値)、インデックス(インデックス)、ソース配列(配列)を順番に並べます.

  • arr.filter(callback)
    パラメータの転送ぱらめーたのてんそう:繰り返し実行する関数くりかえしじっこうするかんすう
    コールバック関数は値を返す必要があります.trueの場合、条件をフィルタすることで、これらの要素は新しい配列の要素になります.
    コールバック関数のパラメータ順序:現在のエンティティ(値)、インデックス(インデックス)、ソース配列(配列)を順番に並べます.

  • arr.reduce(reducer,[initialValue])
    reduceの動作原理は配列の縮小にある.すなわち,複数の値を含む配列が減少し,最終的に1つの値を形成する過程である.このとき,配列を1つの値とする関数をreduceと呼ぶ.
    転送パラメータ:Reduser、初期値
    reduce関数には戻り値が必要で、次のreducer呼び出し時に最初のパラメータに渡されます.
    reduce関数のパラメータ順序:順序別累積値(アキュムレータ)、現在のエンティティ(値)、インデックス(インデックス)、ソース配列(配列)