機能的なJavaScriptにおけるカリーの初心者ガイド
カリー、または部分的なアプリケーションは、JavaScriptを作成するより伝統的な方法に精通している人々に混乱を招くように聞こえる機能的手法の1つです。しかし、適切に適用すると、実際に機能的なJavaScriptをより読みやすくすることができます。
キーテイクアウト- Curryingは、関数の引数の部分的な適用を可能にする機能的なプログラミング手法です。つまり、関数が期待している引数のすべてまたはサブセットを渡すことができます。サブセットが渡された場合、残りの引数を待っている関数が返されます。
- カリーは、JavaScriptコードをより読みやすく柔軟にすることができます。これにより、一貫して振る舞い、迅速に使用できる、簡単に構成された機能のライブラリを作成できます。コードを読むときに理解できます。 カレーするときは議論の順序が重要です。あるバリエーションから別のバリエーションに置き換える可能性が最も高い議論は、元の関数に渡された最後の議論である必要があります。
- RAMDAなどの一部の機能的JavaScriptライブラリは、関数に必要なパラメーターを分割できる柔軟なカレー機能を提供し、それらを個別にまたはグループ内でカスタムカレーのバリエーションを作成できるようにします。カリーを広範囲に使用する予定がある場合は、そのようなライブラリを使用することをお勧めします。 より読みやすく、より柔軟な
- 機能的なJavaScriptに宣伝されている利点の1つは、可能な限り少ない行で正しいポイントに到達し、繰り返しが少ない、より短くてタイトなコードです。時々、これは読みやすさを犠牲にして来ることがあります。機能的なプログラミングの仕組みに精通するまで、このように書かれたコードは読み取りと理解がより困難になる可能性があります。
- 以前にカリーという用語に出くわしたが、それが何を意味するのかわからなかった場合は、気にする必要のないエキゾチックでスパイシーなテクニックと考えることを許されることができます。しかし、カレーは実際には非常に単純な概念であり、開発者に一連の柔軟なオプションを開きながら、関数引数を扱うときにいくつかの馴染みのある問題に対処します。 カリーとは?
簡単に言えば、カレーは関数の引数の部分的な適用を可能にする関数を構築する方法です。これが意味することは、関数が期待しているすべての引数を渡して結果を取得するか、それらの引数のサブセットを渡して、残りの引数を待っている関数を取り戻すことができるということです。それは本当に簡単です。
カリーは、機能的な概念を中心に構築されているHaskellやScalaなどの言語では元素です。 JavaScriptには機能的な機能がありますが、カリーはデフォルトでは組み込まれていません(少なくとも現在の言語のバージョンではそうではありません)。しかし、私たちはすでにいくつかの機能的なトリックを知っているので、JavaScriptで私たちのためにカリーを作ることができます。
これがどのように機能するかを感じるために、おなじみの構文を使用して、私たちが望むカレー機能を構築して、JavaScriptで最初のカレー機能を作成しましょう。例として、名前で誰かに挨拶する関数を想像しましょう。私たちは皆、名前と挨拶をするシンプルな挨拶関数を作成し、コンソールに名前を付けて挨拶を記録する方法を知っています:
var greet = function(greeting, name) { console.log(greeting + ", " + name); }; greet("Hello", "Heidi"); //"Hello, Heidi"
私たちの最初のカレー
var greetCurried = function(greeting) { return function(name) { console.log(greeting + ", " + name); }; };
var greetHello = greetCurried("Hello"); greetHello("Heidi"); //"Hello, Heidi" greetHello("Eddie"); //"Hello, Eddie"
ブラウザでこれを試してみませんか?
greetCurried("Hi there")("Howard"); //"Hi there, Howard"
すべてのことをカレー!
クールなことは、このアプローチを使用するために従来の機能を変更する方法を学んだ今、私たちは必要な数の議論でこれを行うことができます。
2つの引数と同じ柔軟性があるのと同じ柔軟性があります。ネスティングがどこまで進んでも、私たちは私たちの目的に合っているのと同じくらい多くの方法で選択する限り多くの人々を迎えるために新しいカスタム関数を作成できます:
var greetDeeplyCurried = function(greeting) { return function(separator) { return function(emphasis) { return function(name) { console.log(greeting + separator + name + emphasis); }; }; }; };
さらに、元のカレー関数にカスタムバリエーションを作成するときに好きなだけパラメーターを渡すことができ、適切な数の追加パラメーターを使用できる新しい関数を作成できます。
var greetAwkwardly = greetDeeplyCurried("Hello")("...")("?"); greetAwkwardly("Heidi"); //"Hello...Heidi?" greetAwkwardly("Eddie"); //"Hello...Eddie?"
そして、下位のバリエーションを簡単に定義できます:
var sayHello = greetDeeplyCurried("Hello")(", "); sayHello(".")("Heidi"); //"Hello, Heidi." sayHello(".")("Eddie"); //"Hello, Eddie."
伝統的な機能をカレー
var askHello = sayHello("?"); askHello("Heidi"); //"Hello, Heidi?" askHello("Eddie"); //"Hello, Eddie?"
その問題に対処するために、1つのアプローチは、ネストされたすべてのリターンなしで記述された既存の関数の名前を取る迅速で汚れたカレー関数を作成することです。カレー関数は、その関数の引数のリストを引き出し、それらを使用して元の関数のカレーバージョンを返す必要があります。
これを使用するために、私たちはそれを事前に人口を増やしたいと思うだけの多くの引数とともに、任意の数の議論を取る関数の名前を渡します。私たちが戻ってきたのは、残りの議論を待っている関数です:
var greet = function(greeting, name) { console.log(greeting + ", " + name); }; greet("Hello", "Heidi"); //"Hello, Heidi"
そして、前と同じように、私たちは、カレーの元の関数から微分関数を構築するときに使用したい引数の数に関しては限定されません:
var greetCurried = function(greeting) { return function(name) { console.log(greeting + ", " + name); }; };
カリーについて真剣に取り組む
var greetHello = greetCurried("Hello"); greetHello("Heidi"); //"Hello, Heidi" greetHello("Eddie"); //"Hello, Eddie"
RAMDAなどの機能的なJavaScriptライブラリには、関数に必要なパラメーターを分割できる柔軟なカレー機能があり、個別にまたはグループで渡してカスタムカレーのバリエーションを作成できるようにします。カリーを広範囲に使用したい場合、これはおそらく行く方法です。
プログラミングにカリーを追加する方法に関係なく、ネストされた括弧を使用したい場合、またはより堅牢なキャリング機能を含めることを好むかどうかにかかわらず、カレー機能の一貫した命名規則を考え出すと、コードが作成されますより読みやすい。関数の各派生バリエーションには、それがどのように動作するか、それがどのような議論を期待しているかを明確にする名前を持つ必要があります。
引数順序カリーが議論の順序であるときに留意することが重要なことの1つ。説明したアプローチを使用して、1つのバリエーションから次のバリエーションに置き換えられる可能性が最も高いという議論が、元の関数に渡された最後の引数であるという議論を明らかに望んでいます。
議論の順序について先に考えることで、カリーの計画を容易にし、それをあなたの仕事に適用します。そして、あなたの議論の順序を、最も変化する可能性が最も少ないという点であなたの議論の順序を考えることは、機能を設計するときにとにかく入るのは悪い習慣ではありません。
結論
カリーは、機能的なJavaScriptからの非常に便利な手法です。これにより、一貫して動作し、迅速に使用できる、簡単に構成された小さな構成機能のライブラリを生成でき、コードを読むときに理解できます。コーディングプラクティスにカレーを追加すると、コード全体で部分的に適用された機能の使用が促進され、潜在的な繰り返しを避け、機能の引数を命名して対処することについてのより良い習慣に導くのに役立つ可能性があります。
この投稿、あなたが楽しんだなら、あなたはシリーズの他のいくつかも好きかもしれません:- functional javascriptの紹介 JavaScript
- の高次関数 機能的javaScript
- の再帰 機能的なJavaScriptのカレーに関するよくある質問(FAQ)
JavaScriptのカレーと部分的なアプリケーションの主な違いは何ですか?
カリーと部分的なアプリケーションは、両方ともJavaScriptのテクニックであり、関数のいくつかの引数を事前に埋めることができます。ただし、実装と使用法が異なります。 Curryingは、複数の引数を持つ関数が一連の関数に変換される機能プログラミングのプロセスであり、それぞれに単一の引数があります。一方、部分的なアプリケーションとは、関数に多くの引数を修正するプロセスを指し、より小さな供給の別の機能を生成します。カリーは常にネストされたunary(1-ality)関数を生成しますが、部分的なアプリケーションは任意のアリティの関数を生成できます。 JavaScriptの読みやすさと保守性。複雑な関数をよりシンプルで単一の機能に分割することにより、カリーはコードをより読みやすく理解しやすくします。また、各関数が単一のタスクを実行するため、よりクリーンでモジュラーコードを促進します。このモジュール性により、コードは特定の機能に問題を分離できるため、コードの維持とデバッグが容易になります。 3つの数値を追加する関数。カリーがなければ、関数は次のようになります。 )); // outputs:6
カリーを使用すると、同じ関数が次のように記述されます。 ){
}
}
console.log(add(1)(2)(3)); // outputs:6javascriptでカリーを使用することの制限または欠点は何ですか?
カリーには利点がありますが、いくつかの制限もあります。主な欠点の1つは、特に多数の議論を備えた機能を扱う場合、概念に精通していない人のためにコードを理解しにくいことです。また、追加の閉鎖が作成されたため、パフォーマンスオーバーヘッドにつながる可能性があります。さらに、各引数を別の括弧のセットに渡す必要があるため、関数呼び出しをより冗長にすることができます。 JavaScriptの高次関数の概念に関連しています。高次関数とは、1つ以上の関数を引数として取得する関数、結果として関数を返す関数、またはその両方です。カレーは関数を一連の関数呼び出しに変換することを伴うため、本質的に高次関数の使用が含まれます。
javascriptの矢印関数でカリーを使用できますか?
はい、javascriptの矢印関数でカリーを使用できます。実際、矢印関数の構文により、それらは特にカレーに適しています。以前の追加関数を矢印関数を使用して記述する方法は次のとおりです。 ); // outputs:6
人気のあるJavaScriptライブラリまたはフレームワークでカリーが使用されていますか?たとえば、JavaScriptの機能プログラミングのユーティリティ機能を提供するRamdaやLodashなどのライブラリの基本的な概念です。また、反応のための人気のある州管理ライブラリであるReduxにも使用されています。関数構成は、2つ以上の関数を組み合わせて新しい関数を作成するプロセスです。カリー化によりユナリ関数を作成できるため、各関数に正確に1つの入力と1つの出力があることを確認することにより、関数構成を簡素化します。 2つ以上の引数を持つ機能はカレーできます。ただし、実際には、機能をカレーすることは必ずしも実用的または有益であるとは限りません。たとえば、さまざまな時期に異なる数の引数で呼び出される必要がある関数には、カレーが役に立たない場合があります。あなたのコードはより読みやすくモジュール式であり、パフォーマンスにわずかな影響を与える可能性もあります。これは、関数をカレーするたびに、新しい閉鎖を作成するためです。ただし、ほとんどの場合、パフォーマンスへの影響はごくわずかであり、コードの読みやすさと保守性の向上の利点に加えています。
以上が機能的なJavaScriptにおけるカリーの初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
