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