「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript でのカリー化についての詳細な説明

JavaScript でのカリー化についての詳細な説明

2024 年 11 月 8 日に公開
ブラウズ:713

Currying in JavaScript সম্পর্কে বিস্তারিত আলোচনা

Currying হলো একটি ফাংশনাল প্রোগ্রামিং কৌশল যেখানে একটি ফাংশন একাধিক আর্গুমেন্ট নেওয়ার পরিবর্তে একটি একক আর্গুমেন্ট গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে যা পরবর্তী আর্গুমেন্ট গ্রহণ করে। এই প্রক্রিয়াটি চালিয়ে যাওয়া হয় যতক্ষণ না সমস্ত আর্গুমেন্ট গ্রহণ করা হয়, এবং তখন মূল ফাংশনটি কার্যকর হয়।

Currying এর মূল উদ্দেশ্য হল ফাংশন পুনরায় ব্যবহারযোগ্য করা এবং কোডের ফ্লেক্সিবিলিটি বৃদ্ধি করা।

Currying কীভাবে কাজ করে?

Currying হল একটি ফাংশনকে পুনরায় ফাংশন আকারে রূপান্তর করার প্রক্রিয়া, যা আর্গুমেন্টের একটি অংশ গ্রহণ করে এবং বাকি আর্গুমেন্টগুলোর জন্য অপেক্ষা করে। এটি সাধারণত দুটি বা তার বেশি আর্গুমেন্টের ফাংশনের ক্ষেত্রে ব্যবহৃত হয়। Currying ফাংশনাল প্রোগ্রামিংয়ে ফাংশন কম্পোজিশন এবং আংশিক ফাংশন অ্যাপ্লিকেশন সহজ করে তোলে।

Currying-এর উদাহরণ:

সাধারণ ফাংশন

ধরুন একটি সাধারণ ফাংশন আছে যা দুইটি সংখ্যা যোগ করে:

javascriptCopy code
function add(x, y) {
    return x   y;
}

console.log(add(2, 3)); // Output: 5

Currying ফাংশন

এখন, আমরা উপরের ফাংশনটি currying-এর মাধ্যমে পরিবর্তন করব:

javascriptCopy code
function add(x) {
    return function(y) {
        return x   y;
    };
}

const addTwo = add(2); // Currying: প্রথম আর্গুমেন্ট পাস করা হচ্ছে
console.log(addTwo(3)); // Output: 5

ব্যাখ্যা:

  • add(2) কল করলে এটি একটি নতুন ফাংশন রিটার্ন করে যা দ্বিতীয় আর্গুমেন্ট গ্রহণ করে।
  • নতুন ফাংশনটিকে addTwo নামে সংরক্ষণ করা হয়েছে।
  • addTwo(3) কল করলে আউটপুট হয় 5।

Currying-এর সুবিধা:

  1. Reusability: Currying-এর মাধ্যমে ফাংশনগুলোকে সহজেই পুনরায় ব্যবহার করা যায়। একবার প্রাথমিক আর্গুমেন্ট পাস করার পর একই ফাংশন নতুন আর্গুমেন্টের জন্য ব্যবহার করা যেতে পারে।

    উদাহরণ:

    javascriptCopy code
    const multiply = x => y => x * y;
    
    const multiplyByTwo = multiply(2);
    console.log(multiplyByTwo(3)); // Output: 6
    console.log(multiplyByTwo(4)); // Output: 8
    
    
  2. Code Readability: Currying কোডের পাঠযোগ্যতা বৃদ্ধি করে। এটি ফাংশনগুলোর আচরণকে আরও পরিষ্কার করে তোলে, কারণ প্রতিটি ফাংশন একক কাজের জন্য দায়ী।

    উদাহরণ:

    javascriptCopy code
    const greet = greeting => name => `${greeting}, ${name}!`;
    
    const sayHello = greet("Hello");
    console.log(sayHello("Alice")); // Output: Hello, Alice!
    console.log(sayHello("Bob"));   // Output: Hello, Bob!
    
    
  3. Function Composition: Currying-এর মাধ্যমে ফাংশনগুলোকে সহজেই compose করা যায়, যা complex operations-এর জন্য উপকারী।

    উদাহরণ:

    javascriptCopy code
    const compose = (f, g) => x => f(g(x));
    
    const toUpperCase = x => x.toUpperCase();
    const exclaim = x => `${x}!`;
    
    const shout = compose(exclaim, toUpperCase);
    
    console.log(shout("hello")); // Output: HELLO!
    
    
  4. Partial Application: Currying-এর মাধ্যমে ফাংশনগুলোর আংশিক প্রয়োগ করা যায়, যা ভবিষ্যতে অন্যান্য আর্গুমেন্ট দেওয়ার জন্য প্রাথমিক আর্গুমেন্টগুলোকে সংরক্ষণ করতে সাহায্য করে।

    উদাহরণ:

    javascriptCopy code
    const partialAdd = (a, b, c) => a   b   c;
    
    const curriedAdd = a => b => c => a   b   c;
    
    const addFiveAndSix = curriedAdd(5)(6);
    console.log(addFiveAndSix(7)); // Output: 18
    
    

Currying এবং Closures

Currying ফাংশন Closures-এর উপর ভিত্তি করে কাজ করে। প্রতিটি নতুন ফাংশন তৈরি হওয়ার সময় এটি পূর্বের আর্গুমেন্টগুলোকে মেমরিতে সংরক্ষণ করে রাখে।

উদাহরণ:

javascriptCopy code
function add(x) {
    return function(y) {
        return function(z) {
            return x   y   z;
        };
    };
}

console.log(add(1)(2)(3)); // Output: 6

ব্যাখ্যা:

  • প্রথম কলের সময় x সংরক্ষণ হয়, দ্বিতীয় কলের সময় y সংরক্ষণ হয়, এবং তৃতীয় কলের সময় z সংরক্ষণ হয়। শেষে তাদের যোগফল রিটার্ন হয়।

Conclusion

Currying হলো JavaScript এর একটি শক্তিশালী প্রোগ্রামিং কৌশল যা ফাংশনাল প্রোগ্রামিংকে সহজ করে এবং কোডের পুনরায় ব্যবহারযোগ্যতা এবং মডুলারিটি বাড়ায়। Currying এর মাধ্যমে একটি ফাংশনকে ধাপে ধাপে প্রয়োগ করা যায় এবং এটি কোডকে ছোট ও পরিষ্কার করে। যদিও Currying সব ক্ষেত্রে উপযুক্ত নয়, কিন্তু নির্দিষ্ট কিছু সমস্যা সমাধানে এটি একটি অমূল্য টুল। JavaScript ডেভেলপারদের জন্য Currying এর কনসেপ্ট এবং এর প্রয়োগ বোঝা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি জটিল সমস্যাগুলিকে আরও কার্যকরীভাবে সমাধান করতে সাহায্য করে।

リリースステートメント この記事は次の場所に転載されています: https://dev.to/rsmacademybd/currying-in-javascript-smprke-bistaarit-aalocnaa-3el7?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • 週刊ブログ: 今週出会った 4 つの興味深いこと
    週刊ブログ: 今週出会った 4 つの興味深いこと
    1. VS Code でのファイル名の混乱を避ける VS Code で C ファイルを作成するとき、最初にファイルに .c.cpp という名前を付けました。プログラムが完了した後、実行中にエラーが発生しました。 30 分間のトラブルシューティングの後、問題はファイル名 にあること...
    プログラミング 2024 年 11 月 8 日に公開
  • Python の正規表現における「\d」と「[0-9]」の違いは何ですか?
    Python の正規表現における「\d」と「[0-9]」の違いは何ですか?
    [Characters]: Regex の \dPython スタイルの正規表現の "\d" 文字クラスは、数字の一致に使用されます。通常、数字は数字 (0 ~ 9) として定義されます。ただし、「\d」の動作はプログラミング言語と実装によって異なる場合があることに注意してくださ...
    プログラミング 2024 年 11 月 8 日に公開
  • Golang で Bytes.Buffer の先頭に書き込むにはどうすればよいですか?
    Golang で Bytes.Buffer の先頭に書き込むにはどうすればよいですか?
    Golang でのプレフィックス バッファーの書き込みGolang では、bytes.Buffer は効率的な文字列の連結と操作のために設計された型です。ただし、開発者によっては、バッファに追加するだけの組み込みヘルパー メソッド (WriteString など) とは異なり、バッファの先頭に書き込...
    プログラミング 2024 年 11 月 8 日に公開
  • Laravelでローカルファイルの一時URLを作成する
    Laravelでローカルファイルの一時URLを作成する
    Laravel でプライベート ファイルを操作するということは、通常、S3 や DigitalOcean などのサードパーティ サービスを使用することを意味します。しかし、ローカル開発環境にいる場合、または軽量プロジェクトがある場合はどうなるでしょうか?サードパーティのクラウド サービスに依存したく...
    プログラミング 2024 年 11 月 8 日に公開
  • API を使用したゼルダ BOTW モンスター ギャラリー Web コンポーネントを作成する方法を学びます。
    API を使用したゼルダ BOTW モンスター ギャラリー Web コンポーネントを作成する方法を学びます。
    Modulo チュートリアルが戻ってきました! 皆さんこんにちは!夏休みの後、Modulo チュートリアルに戻ってきました。さらに多くのチュートリアルを準備中ですので、楽しみにしていてください。とはいえ、次のトピックに関する特定のアイデアがある場合は、必ずコメント欄でお知らせくださ...
    プログラミング 2024 年 11 月 8 日に公開
  • 同じ ID を持つ複数の要素に jQuery 関数を適用するにはどうすればよいですか?
    同じ ID を持つ複数の要素に jQuery 関数を適用するにはどうすればよいですか?
    jQuery を使用した同じ ID の要素へのアクセスHTML では、各要素に一意の ID が必要です。ただし、同じ ID を持つ複数の要素に jQuery 関数を適用する必要があるシナリオも考えられます。この記事では、そのような状況に対処する方法を検討します。提供されたコード スニペットによると、...
    プログラミング 2024 年 11 月 8 日に公開
  • パッケージとクラスパスの検索
    パッケージとクラスパスの検索
    ディレクトリごとのパッケージのミラーリング: Java パッケージは、ファイル システム上のディレクトリにマッピングされます。 Java ランタイムがパッケージを検索する 3 つの方法: 現在の作業ディレクトリ: ランタイム システムは、作業ディレクトリを開始点として使用します。パッケージが現在のデ...
    プログラミング 2024 年 11 月 8 日に公開
  • PHP の PATH_INFO とは何ですか? Apache ではどのように機能しますか?
    PHP の PATH_INFO とは何ですか? Apache ではどのように機能しますか?
    PHP の PATH_INFO: 謎の解明PATH_INFO 変数はさまざまなコンテキストで登場しますが、その本当の性質は依然としてとらえどころがありません。 PATH_INFO を明確に理解するには、その起源を詳しく調べる必要があります。Apache Web サーバーと PATH_INFOPATH...
    プログラミング 2024 年 11 月 8 日に公開
  • JavaScript でのメソッドのオーバーロード
    JavaScript でのメソッドのオーバーロード
    JavaScript、メソッドのオーバーロード (Java や C# などの言語と同様) は、関数の定義が 1 つだけであるため、直接サポートされていません。ただし、JavaScript は動的であるため、次のような手法を使用してオーバーロードを模倣することができます。 引数の数または型をチェックし...
    プログラミング 2024 年 11 月 8 日に公開
  • Linux 環境で pthread を使用してスレッド優先度を効果的に高めるにはどうすればよいですか?
    Linux 環境で pthread を使用してスレッド優先度を効果的に高めるにはどうすればよいですか?
    pthread でのスレッド優先度の強化: 総合ガイドLinux 環境で pthread を利用する場合、多くの場合、スレッド優先度を調整する必要があります。パフォーマンスを最適化します。このガイドでは、スレッド優先度の範囲と説明に関する不確実性、および優先度の設定が高すぎることに伴う潜在的なリスク...
    プログラミング 2024 年 11 月 8 日に公開
  • 初期の AI による単体テストの生成
    初期の AI による単体テストの生成
    単体テスト生成の高速化とコード品質の向上 最近、単体テストの自動生成用に設計された AI エージェントである Early について詳しく知る機会がありました。私は TypeScript と ExpressoTS Framework を定期的に使用する人間として、Early がどのよ...
    プログラミング 2024 年 11 月 8 日に公開
  • Java で文字配列を文字列に変換するにはどうすればよいですか?
    Java で文字配列を文字列に変換するにはどうすればよいですか?
    Char 配列から String への変換Java では、Char 配列を String コンストラクターを使用して変換して文字列に戻すことができます。次のコードは、この変換を実行する方法を示しています。char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', '...
    プログラミング 2024 年 11 月 8 日に公開
  • データ エンジニアリングの究極のガイド。
    データ エンジニアリングの究極のガイド。
    データ エンジニアリングは、大規模なデータを収集、保存、分析するためのシステムを設計および構築する実践です。これは幅広い分野であり、ほぼすべての業界に応用されています。この記事の目的は、データ エンジニアになる方法について段階的なガイドを提供することです。 ほとんどのデータ エンジニアは、コンピュー...
    プログラミング 2024 年 11 月 8 日に公開
  • React でブロードキャスト チャネル API を使用する方法
    React でブロードキャスト チャネル API を使用する方法
    今日の Web アプリケーションでは、複数のタブまたはウィンドウにわたって情報を最新の状態に保つことで、ユーザー エクスペリエンスを大幅に向上させることができます。たとえば、ユーザーが 1 つのタブでログアウトした場合、そのアクションを他のすべてのタブに反映したいとします。 ブロードキャスト チャネ...
    プログラミング 2024 年 11 月 8 日に公開
  • Pandas での連鎖割り当ては効率的ですか?
    Pandas での連鎖割り当ては効率的ですか?
    Pandas の連鎖代入はじめに人気のデータ操作ライブラリである Pandas の連鎖代入は、データ フレームの値に対して連続して実行される操作です。操作が適切に処理されないと、パフォーマンスの問題が発生する可能性があります。連鎖割り当ての警告Pandas は、連鎖割り当ての潜在的な非効率性を示すた...
    プログラミング 2024 年 11 月 8 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3