」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 柯里化的詳細討論

JavaScript 柯里化的詳細討論

發佈於2024-11-08
瀏覽:813

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]刪除
最新教學 更多>
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-07-24
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-07-24
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-24
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-24
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-07-24
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-07-24
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-07-24
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError: SomeClass...
    程式設計 發佈於2025-07-24
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-07-24
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP將...
    程式設計 發佈於2025-07-24
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-07-24
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-07-24
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-07-24
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-07-24

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3