”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript 中柯里化的详细讨论

JavaScript 中柯里化的详细讨论

发布于2024-11-08
浏览:529

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计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-04-27
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-27
  • 如何修复\“常规错误: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-04-27
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-27
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-04-27
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-27
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-04-27
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-27
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-04-27
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-27
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-04-27
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-27
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-04-27
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-04-27

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3