関数式プログラミング定義、純関数


成功したプログラミング
1.すべてのプログラミングモードはプログラミングを成功させるために存在する
2.成功したプログラミングはプログラムを作る仕事です.
3.良いプログラムは良好な可用性、性能、拡張性、計画変更に対する対応能力などを持っている.
4.これらの作業を効率的かつ効率的に完了することは、成功したプログラミングです.
かんすうしきプログラミング
  • 関数式プログラミングは、プログラミングに成功するために副作用を憎み、組合せ性を強調するプログラミングパターンである.
  • 付随効果が嫌いです.=>純関数を作成します.
    (return値以外は外部とのコミュニケーションができません)
    組み合わせを強調します.=>モジュール化レベルを向上させる.
    純関数=>エラーを低減し、安定性を向上させる.
    モジュール化の度合いが高い.=>生産性を高める.
    function add(a, b) {
    	return a + b;
        }
    console.log(add(10, 5));
    この関数は、いつどこで出力されても同じ値を返します.
    得られる効果->安定、メンテナンスが容易、組合せ性が良い(モジュール化)
    なぜadd関数が純粋な関数なのか:
    1.同じパラメータが与えられた場合、常に同じ値を返します.
    2.レリーフ効果なし(returnに外部効果を加えない)
    **純関数から返される値は、評価ポイント->非純関数から返される値に依存します.
    ex)
    var c = 10;
    function add2(a, b) {
      return a+b+c;
    }
    console.log(add2( 10, 2 )); //22
    c = 20;
    console.log(add2( 10, 2 )); //32
    *同じパラメータを使用すると、異なる値になります.純水じゃない
    function add3(a, b) {
    	c = b; // 리턴값으로 소통하는 거 외에 외부에 영향을 미치는 값이 있으면 부수효과가
      		// 발생했다라고 하고 순수함수가 아니라고 함
    	return a + b;
    }
    
    console.log('c: ',c); // 20
    console.log(add3(20, 30));
    console.log('c: ',c); // 30
    
    var obj1 = { val : 10 }
    function add4(obj, b) {
      obj.val += b;
    }
    console.log( obj1.val); //10
    add4(obj1, 20);
    console.log( obj1.val); //30
    オブジェクトを操作できます!
    元の値を保持して新しい値を作成し、値をコピーして変更した新しい値を返します.
    関数を作成します.
    var obj1 = { val : 10 };
    function add5(obj, b) {
    return { val : obj.val + b }
    }
    console.log(obj1.val) // 10
    var obj2 = add5(obj1, 20);
    console.log(obj2.val) // 30
    値を変形したり値を処理したりする場合、元の初期化値に触れず、すべての値を変更せず、外部状態を変更せず、パラメータとして受信した値を直接変更せず、値を処理するプログラミング-->>純関数の利用
    jsでは、関数は1級関数です.
    すなわち,関数を値として扱うことができる.
    関数を変数に含めることもできます.
    変数の関数に値を割り当てることもできます.
    パラメータとして送信することもできます.