JavaScript関数式プログラミング(Funtional Programming)純関数用法分析

2498 ワード

本論文の実例はJavaScript関数式プログラミング(Funtional Programming)の純関数的用法を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
関数式プログラミングは私達が多く純関数を作成します.純粋な関数はあなたがそれに渡したものだけを頼りにしています.関数以外のものを使わないし、関数以外のものにも影響しません.純粋な関数に対応するのは不純粋な関数、すなわち不純粋な関数は関数以外のものを使用する可能性があります.例えばグローバル変数を使用します.関数以外のものにも影響します.例えばグローバル変数の値を変えます.
純粋な関数を多く使うのは、より信頼性が高く、副作用もないからです.同じ値を渡します.毎回同じ結果を出力します.このような特性は透明といいます.これはプログラムをより安定させて、テストもしやすいです.
副作用
純関数には副作用がなく,副作用のある関数はすべて不純である.風邪薬を飲みましたが、副作用は風邪を治療したいです.関数の副作用の多くは関数依存として表現され,またはそれ以外のものを変えた.
例を見ます

let name = 'longzhoufeng'
const greet = () => {
 console.log(`hello, ${name}`)
}

greetは純粋な関数ではありません.この関数は関数以外のものに依存しています.ここが大域作用領域のnameです.このようにする問題は、関数に依存するnameがアプリケーションの実行時に変化する可能性が高いということです.

greet() //   :“hello, longzhoufeng”
let name = 'longzhoupeng' // name       
greet() //   :“hello, longzhoupeng”

このように変更します

const greet = (name) => {
 console.log(`hello, ${name}`)
}

今は必要なものを関数で明確に説明しました.ここがnameパラメータです.それは今あなたが渡したnameパラメータの値だけを頼りにしています.しかし、この関数はまだ純粋な関数ではなく、コンソール上でものを出力しています.これは関数以外のものを変えていますので、純粋な関数ではありません.このように改めます.

const greet = (name) => {
 return `hello, ${name}`
}

今greetは純粋な関数です.それはただそのnameに頼るだけで、関数以外のものも変えていません.そして毎回同じname値をあげます.毎回同じ結果を返してくれます.この関数は安全で確実です.
透明とは
透明(Referential transparency)という意味です.例えば私は「中国の首都」と言います.私の表現の意味は「北京」です.他の意味はありません.ですから、私の表現は透明なものを指しています.例えば、「ちょっとお腹が空きました.」この表現は不透明です.どういう意味ですか?確かではないです.何かを食べに行きたいのかもしれません.買い物してきて食べてもらいたいのかもしれません.
純粋な関数が指すものは透明です.同じものを与えると毎回同じ結果が返ってきます.

const greet = (name) => {
 return `hello, ${name}`
}
const logger = (message) => {
 console.log(message)
}
logger(greet('longzhoufeng'))
//            :
logger('hello, longzhoufeng')
//          ,   greet     。
//      “longzhoufeng”,         “hello, longzhoufeng”

greetが透明であることから、表現の中でそれを指しているものに置き換えると、プログラムの実行に影響がありません.例えば、一つの表現でgreetを使っているところは、greetをハロー、longzhousfengに置き換えることができます.これは、greetが指しているものが文字列hello、longzhousfengです.
参考資料
http://stackoverflow.com/questions/210835/what-is-referential-transparency
JavaScriptの関連内容については、当駅のテーマを見ることができます.「JavaScript常用関数技術まとめ」、「javascript対象入門教程」、「JavaScriptエラーとデバッグ技術まとめ」、「JavaScriptデータ構造とアルゴリズム技法まとめ」及び「JavaScript数学演算用法まとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.