関数式プログラミング探索(一)-『JS関数式プログラミングガイド』読後感


「JS関数式プログラミングガイド」使用JavaScriptは、関数式プログラミングの基本的な考え方を述べています.関数式プログラミングには多くの利点があります.例えば、簡潔で、「副作用」をなくすなどです.同時にそれは出所の数学の理論で、もっと高い抽象度に達することができます.
紹介する と言っています.プログラミングの範式の一種です.理論の基礎は前世紀の30年代の数学界のlambda演算に起源しています. に属しています.この思想を最も早く運用したプログラミング言語は前世紀の50年代のLisp言語です.この言語はハッカー圏で伝奇的な色彩を備えています.
もう一つのプログラムのモデルは有名な です.十年前に、私たちが接触したプログラミング教材、技術文章はほとんど対象向けのプログラミングで、プログラミングは 、 、 を使わず、自分がプログラミングできると言いにくいです.
関数式プログラミング思想は近年ますますみんなに受け入れられ、推賞されています.二つの主流言語は相次いで関数式プログラミングをサポートする特性を増加しました.Java8Lambda式が追加され、Streamフロー式処理などの関連するアプリケーションシーンのサポートが追加された.JavaScriptES6表現を追加し、LambdaArray動作のような関連するアプリケーションシーンのサポートを追加した.一方、map, fliter, reduceの3つのフレームの一つであるReactは、今年、Hooks特性を追加し、状態関数コンポーネントをサポートしています.したがって、クラスのコンポーネントを完全に代替することができます.
大きな傾向から見ると、JavaScriptのように、主要な言語はだんだん多様な範式を支持する傾向にあり、対象に向けた特性:類と継承も増加しています.
関数プログラミングの特徴
関数は一等公民です.
これは関数式プログラミングの基本条件です.ここでは関数の優先権は何ですか?
上の特徴によって、いくつかの概念を紹介します.
  • 関数ネスト
  • クローズド
  • 高次関数
  • これらのJS開発者はよく知っています.よく使います.後でこれらの特性を振り返ってみてください.関数式プログラミングにはどのような場面がありますか?
    コードの例:
    //     ,    
    function regexCheck(reg) {
      return function(str) {
        return reg.test(str)
      }
    }
    
    //     
    regexCheck(/^(130|131)\d{8}$/)('13012341234')
    ステートメントではなく表式を使います.
    表式の特徴は、単純な演算プロセスであり、完了後には常に演算結果があります.最も一般的な表現は演算式です.
    const a = 10
    const b = a * 10 + 10
    関数式プログラミングにおける表式は、関数を変数として使用します.
    //     ,    
    function ifNot(func) {
        return function(x) {
            return !func(x)
        }
    }
    
    //     
    const isHtmlTag = regexCheck(//)
    ;['hello world', 'alert(1)'].filter(ifNot(isHtmlTag))
    関数を変数のように演算すると、コードが簡潔で柔軟になります.
    副作用がない
    ここでの「副作用」とは、JavaScriptというもので、関数運転中に、グローバル変数を修正したり、データベースにデータを書き込んだり、ネットワーク要求を開始したりするなど、演算以外の他の結果が発生します.
    関数式プログラミングはどうして「副作用」をなくすべきですか?経験豊富なプログラマーはきっと知っています.システムの複雑さとBugは多くの場合「副作用」によって作られます.
  • グローバル変数は、多くの場所で使用され、変更されています.間違って使用されていないことを保証するのは難しいです.マルチスレッドに関連している場合は、システムの複雑性が大幅に増加し、バックエンドのポストを面接し、高合併はあなたの能力を考察する最も重要なポイントです.
  • はデータベースにデータを書き込み、ネットワーク要求を開始したのと同じように、常にシステム中の爆弾であり、いつあなたが予期していない状況が現れるか分かりません.
  • もちろん、私たちも副作用を完全に避けることはできません.私たちがやるべきことは制御です.状態管理器Side EffectにはRedux概念があります.effectsにもReact Hooksがあります.目的はすべて「副作用」を分離することです.
    「副作用」をなくすための一般的なスキームがあります.状態を変えない、すなわち関数呼び出しは新しい値を返します.
    const serials = ['10', '20', '30']
    //               
    const serialsOpts = serials.concat(['40', '50']).join('/')
    透過性の参照
    透明を参照すると、前の特性の誘導体特性です.同じパラメータで関数を呼び出すと、毎回同じ結果が得られます.この関数式の代わりに結果を使うことができますので、参照透明と言います.
    一つの関数が外部変数と状態に依存しない場合、それは透明参照を満たすことができます.このような関数は私たちもその純関数と呼ばれます.
    その利点はたくさんあります.
  • は、プログラムを容易に理解し、導出する.
  • 試験手順も簡単に構築できます.その演算ロジックは単純で安定しています.
  • は任意に並列して実行することができる.
  • 締め括りをつける
    関数プログラミングは数学の範疇論から起源しています.理論はかなり抽象的で、私はまだ初心者です.本稿では関数式プログラミングの歴史と現状を簡単に紹介し、関数式プログラミングの基本的な特徴を述べました.今後も関数式プログラミングの関連理論、よくあるデザインパターン、それらの応用を学び続けます.
    交流を歓迎します
    個人は本を読んで公衆号、交流を歓迎します!