javascript柯里化
4921 ワード
Currying is not idiomatic in JavaScript
1.「あまり使わない」とはどういう意味ですか?
ちょっと急進的なタイトルは、タイトル党がこのブログを誤読する可能性があります.私は明らかにしたいです.私は関数式のプログラミングが好きです.私の主な観点は:コアJavaScript機能の一部は、curryingと競合している. はcurryingには他の選択肢があると思います.特に来るべき提案があります.partial appication(偏関数アプリケーション)で使うのはとてもいいです.これはあまり衝突がありません. JavaScriptの最も良い特性の一つは、様々なプログラミングスタイルを適用できることです.そのため:Curryingは何も言及していない代替品までプログラミングすれば、Currringを思う存分適用してもいいです.このようにすればコードのスタイルが一致するようにしてください.そして、あなたのコードを準備します.生態系の他の部分とはちょっと違います.
2.Currying
Curryingは関数式プログラミングにおいて人気のある技術であり、偏関数の応用に役立つ.
この考え方は、関数にすべてのパラメータを提供しないと、関数を返します.関数のパラメータは残りのパラメータで、その出力は元の関数の結果です.
例えば、配列のすべての要素に2を加えたい場合、バイナリ関数Add(x,y)があります.
二つの選択があります.addを実行する方法があります.curryingをサポートします.
2.1シンプルcurrying
ES 6矢印関数は、簡単に手動でコリ関数を作成することができる.
2.2 curryingをリロードする
いくつかのライブラリは、リロードの関数を提供します.これらの積載関数はパラメータの数によってそれぞれ異なる表現があります.一つのパラメータだけを使用するとコリック化されます. は、すべてのパラメータを使用すると、通常の関数として呼び出されます. は、複数のパラメータ(全てのパラメータではなく)を使用すると、これらのパラメータに結合された関数を返します. この形式のcurringの実現は以下の通りである.
2.3まとめ
コリック化は偏向関数の応用に役立つ関数変換技術である.
3.Curryingといくつかのjavascriptの基礎は衝突があります.
JavaScriptでcurryingを使ってプログラムしたいなら、二つの選択があります.本物のcurryingを使用します. は、静的に入力しやすいと提唱しています. 反対:一般的ではない関数が文法を呼び出す. リロードcurryingを使用する. 提唱:優雅な文法. は反対します.取得しにくい静的タイプです. 内蔵関数や方法を変えてあなたのcurryingスタイルに適応すれば、多くの問題に直面します.
これらの欠点はすべて同じように重要ではありません.
3.1名前パラメータ
javascriptの中の有名なパラメータはObjectの字面量シミュレーション(Simullating named parameters ES 6)を通じて私はこのような結合パラメータの方式が好きで、彼はコードをより自己記述性があるようにします.すべてのcurryingではないjavascriptライブラリは、名前パラメータをサポートします.
3.2関数の呼び出しと非関数の呼び出しが不明です.
通常は関数の後に()を使って関数を実行することができます.Currrying後、関数fooの関数の個数を明確に知る必要があります.foo(123)が実行された後に得られたのは関数ですか?それとも関数ですか?
下の二つの偏関数を比較して適用します.
名前パラメータを使うと、curryではより多くの情報が失われます.
3.3 Curryingとデフォルトパラメータの衝突
パラメータを無視すると、関数のデフォルトパラメータが使用されます.
パラメータのデフォルト値を使用してパラメータを省略するということは、デフォルト値を使用して、curryingを使用してパラメータを省略するということは、偏り関数を返すことを意味するので、両者が衝突します.
3.4 Currying友好の関数
Curryingを用いて,パラメータは関数開始に対して構成と演算の終了に重要である.Javascriptの中ではそうではないです.
例えば、パースInt()の署名は、
Curryingというと、一般的には偏関数プログラミングがほしいです.次の例を見てみましょう.Curryingを再ロードし、代替案を探索します.
この提案の利点は、任意の署名をうまく処理し、記述的な文法を備えていることにある.
5.拡張読み Currying versus partial appration(with JavaScript code) Arrow functions vs.bind() アンキュリー「this」in JavaScript 原文の住所私のブログ:neverland.githb.io 私のemail [email protected]
1.「あまり使わない」とはどういう意味ですか?
ちょっと急進的なタイトルは、タイトル党がこのブログを誤読する可能性があります.私は明らかにしたいです.私は関数式のプログラミングが好きです.私の主な観点は:
2.Currying
Curryingは関数式プログラミングにおいて人気のある技術であり、偏関数の応用に役立つ.
この考え方は、関数にすべてのパラメータを提供しないと、関数を返します.関数のパラメータは残りのパラメータで、その出力は元の関数の結果です.
例えば、配列のすべての要素に2を加えたい場合、バイナリ関数Add(x,y)があります.
const arr = [1, 2, 3];
arr.map(add(2)); // [3, 4, 5]`
ちなみに、自動curryingを有する関数式プログラミング言語は、通常、このように使用可能な加算オペレータを有する.二つの選択があります.addを実行する方法があります.curryingをサポートします.
2.1シンプルcurrying
ES 6矢印関数は、簡単に手動でコリ関数を作成することができる.
const add = x => y => x + y;
// ( )
function add(x) {
return function(y) {
return x + y;
}
}
以下のようにadd()を実行できます.add(2)(3); // 5
一つの関数は複数の変換が必要な入れ子関数を持っています.自動curryingを持つ関数式プログラミング言語の多くは文法的にadd(1,2)とadd(1)(2)の区別がありません.2.2 curryingをリロードする
いくつかのライブラリは、リロードの関数を提供します.これらの積載関数はパラメータの数によってそれぞれ異なる表現があります.
function add(...args) {
if (args.length < 2) {
return add.bind(this, ...args);
}
const [x, y] = args;
return x + y;
}
ツール関数を作成して、普通の関数をこのような実現に変換できます.2.3まとめ
コリック化は偏向関数の応用に役立つ関数変換技術である.
3.Curryingといくつかのjavascriptの基礎は衝突があります.
JavaScriptでcurryingを使ってプログラムしたいなら、二つの選択があります.
これらの欠点はすべて同じように重要ではありません.
3.1名前パラメータ
javascriptの中の有名なパラメータはObjectの字面量シミュレーション(Simullating named parameters ES 6)を通じて私はこのような結合パラメータの方式が好きで、彼はコードをより自己記述性があるようにします.すべてのcurryingではないjavascriptライブラリは、名前パラメータをサポートします.
3.2関数の呼び出しと非関数の呼び出しが不明です.
通常は関数の後に()を使って関数を実行することができます.Currrying後、関数fooの関数の個数を明確に知る必要があります.foo(123)が実行された後に得られたのは関数ですか?それとも関数ですか?
下の二つの偏関数を比較して適用します.
foo(123, ?)
_ => foo(123, _)
foo()は様々な方法での呼び出しに対応しています.名前パラメータを使うと、curryではより多くの情報が失われます.
arr.map(findCity({ latitude: 48.137154 })); // curried
arr.map(_ => findCity({ latitude: 48.137154, longitude: _ }))
静的タイプシステム(Type Script,Flow,…)はエラーを低減しますが、代替方法はまだ読みやすいです.3.3 Curryingとデフォルトパラメータの衝突
パラメータを無視すると、関数のデフォルトパラメータが使用されます.
function add(x=0, y=0) {
return x + y;
}
デフォルトパラメータは、追加パラメータをより透明にし、既存の呼び出しを破壊しないようにすることができます.この技術はネーミングパラメータに特に有用で、汎用関数と方法の適用性を保証するためによく使われます.パラメータのデフォルト値を使用してパラメータを省略するということは、デフォルト値を使用して、curryingを使用してパラメータを省略するということは、偏り関数を返すことを意味するので、両者が衝突します.
3.4 Currying友好の関数
Curryingを用いて,パラメータは関数開始に対して構成と演算の終了に重要である.Javascriptの中ではそうではないです.
例えば、パースInt()の署名は、
parseInt(s : string, radix : number);
これにより、ベースをこのように事前に充填することは不可能になる. ['32', '17', '5'].map(parseInt(10)) // doesn’t work
偏関数プログラミングにはどのような代替案がありますか?Curryingというと、一般的には偏関数プログラミングがほしいです.次の例を見てみましょう.Curryingを再ロードし、代替案を探索します.
[1, 2, 3].map(add(2))
代替1:.bind() [1, 2, 3].map(add.bind(null, 2))
代替2:arrow functions. [1, 2, 3].map(x => add(2, x))
代替3:an uploming proposal for partial aplication. [1, 2, 3].map(add(2, ?))
文法が固定されていて、提案は早い段階にあります.この提案の利点は、任意の署名をうまく処理し、記述的な文法を備えていることにある.
5.拡張読み