DEV Community

Cover image for Currying in JavaScript সম্পর্কে বিস্তারিত আলোচনা
RSM Academy BD
RSM Academy BD

Posted on

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

Enter fullscreen mode Exit fullscreen mode

Currying ফাংশন

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

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

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

Enter fullscreen mode Exit fullscreen mode

ব্যাখ্যা:

  • 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

Enter fullscreen mode Exit fullscreen mode

ব্যাখ্যা:

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

Conclusion

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

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay