まだカリー化を理解していないと思います。それが何をするのか、どのように行うのかは理解しています。ただ、それを使用する状況が思い浮かばないのです。
JavaScript のどこでカリー化を使用していますか (または、主要なライブラリはどこでカリー化を使用していますか)? DOM 操作や一般的なアプリケーション開発の例を歓迎します。
答えの一つアニメーションについて言及しています。 のような関数はslideUp
、fadeIn
要素を引数として受け取り、通常はデフォルトの「アニメーション関数」が組み込まれた高階関数を返すカリー化された関数です。なぜそれが、いくつかのデフォルトを使用して上位関数を適用するよりも優れているのでしょうか?
使用することで何か欠点はありますか?
ご要望に応じて、JavaScript カリー化に関する優れたリソースをいくつか紹介します。
- http://www.dustindiaz.com/javascript-curry/
- クロックフォード、ダグラス (2008)JavaScript: 良い部分
- http://www.svendtofte.com/code/curried_javascript/(ML に寄り道するので、「ML の短期集中講座」のセクション全体をスキップして、「カリー化された JavaScript の書き方」からやり直してください)
- http://web.archive.org/web/20111217011630/http://blog.morrisjohns.com:80/javascript_closures_for_dummies
- JavaScript クロージャはどのように機能しますか?
- https://johnresig.com/blog/partial-functions-in-javascript(レジグ氏はいつものようにお金について語る)
- http://benalman.com/news/2010/09/partial-application-in-javascript/
コメントに新しい情報が出てきたら、追加していきます。
したがって、回答によれば、カリー化と部分適用は一般的に便利なテクニックです。
同じ構成で高レベル関数を呼び出すことで頻繁に「改良」する場合は、高レベル関数をカリー化 (または Resig の部分を使用) して、シンプルで簡潔なヘルパー メソッドを作成できます。
ベストアンサー1
これはクロージャを使用する JavaScript でのカリー化の興味深く実用的な使用法:
function converter(toUnit, factor, offset, input) { offset = offset || 0; return [((offset + input) * factor).toFixed(2), toUnit].join(" "); } var milesToKm = converter.curry('km', 1.60936, undefined); var poundsToKg = converter.curry('kg', 0.45460, undefined); var farenheitToCelsius = converter.curry('degrees C', 0.5556, -32); milesToKm(10); // returns "16.09 km" poundsToKg(2.5); // returns "1.14 kg" farenheitToCelsius(98); // returns "36.67 degrees C"
curry
これは の拡張に依存していますFunction
が、ご覧のとおり、apply
(あまり凝ったことはせずに) のみを使用します。
Function.prototype.curry = function() { if (arguments.length < 1) { return this; //nothing to curry with - return function } var __method = this; var args = toArray(arguments); return function() { return __method.apply(this, args.concat([].slice.apply(null, arguments))); } }