Currying এবং Lambda Expressions এর সাথে ব্যবহার

Currying এবং Partial Application - জাভা ফাংশনাল প্রোগ্রামিং (Java Functional Programming) - Java Technologies

332

Currying এবং Lambda Expressions ফাংশনাল প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ কনসেপ্ট যা Java 8 থেকে ইন্ট্রডিউস করা হয়েছে এবং এগুলি কোডকে আরও কার্যকরী, সংক্ষিপ্ত এবং পড়তে সহজ করে তোলে।

এখানে, আমরা Currying এর ধারণা এবং Lambda Expressions এর সাথে এর ব্যবহার আলোচনা করব।


Currying কি?

Currying হল একটি প্রক্রিয়া যেখানে একটি ফাংশনকে একাধিক আর্গুমেন্ট নেওয়ার পরিবর্তে ধাপে ধাপে আর্গুমেন্ট নেয়া হয়। এটি মূলত higher-order function বা partial function application এর মতো কাজ করে।

Currying-এ একটি ফাংশন, যা একাধিক আর্গুমেন্ট নেয়, ধাপে ধাপে আর্গুমেন্ট নিয়ে এক বা একাধিক ফাংশন রিটার্ন করে, যার মাধ্যমে পরবর্তী আর্গুমেন্টকে ইনপুট হিসেবে নেয়। Currying-এর মাধ্যমে আপনি একটি ফাংশনকে একাধিক আর্গুমেন্ট গ্রহণের পরিবর্তে, সেই আর্গুমেন্টগুলিকে এক একটি করে ফাংশন কলের মাধ্যমে গ্রহণ করতে পারেন।

Currying এর ধারণা:

ধরা যাক, একটি ফাংশন add(a, b) দুইটি আর্গুমেন্ট গ্রহণ করে। Currying-এ এই ফাংশনটি এমনভাবে পরিবর্তিত হবে যে, এটি প্রথমে একটি আর্গুমেন্ট নিবে এবং একটি নতুন ফাংশন রিটার্ন করবে যা দ্বিতীয় আর্গুমেন্ট নেবে।

Currying Example:

আমরা এখানে একটি সাধারণ currying ফাংশন দেখব যা দুইটি আর্গুমেন্ট নিয়ে তাদের যোগফল রিটার্ন করে।

1. Currying এর উদাহরণ:

import java.util.function.Function;

public class CurryingExample {
    public static void main(String[] args) {
        // Currying: Returning a function that takes the second argument
        Function<Integer, Function<Integer, Integer>> add = a -> b -> a + b;

        // Applying currying: first argument is 5, then we apply the second argument
        int result = add.apply(5).apply(3);
        System.out.println(result);  // Output: 8
    }
}

এখানে, add ফাংশনটি একটি higher-order function যা প্রথমে একটি ইনপুট নেয় এবং দ্বিতীয় ইনপুটের জন্য একটি নতুন ফাংশন রিটার্ন করে। এর মাধ্যমে প্রথম ইনপুটটি সংরক্ষিত থাকে এবং পরবর্তী ফাংশন কলের মাধ্যমে দ্বিতীয় ইনপুট প্রদান করা হয়।

এটি Currying এর একটি উদাহরণ, যেখানে a -> b -> a + b একটি ফাংশন রিটার্ন করছে যা পরবর্তী সময়ে দ্বিতীয় আর্গুমেন্ট নিয়ে যোগফল রিটার্ন করে।


Lambda Expressions এর সাথে Currying:

Lambda Expressions হল Java 8 থেকে প্রবর্তিত একটি নতুন ফিচার যা Functional Programming ধারণা সহজতর করে তোলে। এটি ফাংশনাল ইন্টারফেসের মাধ্যমে কোডকে আরও পরিষ্কার এবং সংক্ষিপ্ত করে তোলে। Currying এবং Lambda Expressions একসাথে ব্যবহার করা হলে, কোড আরও শক্তিশালী এবং এক্সপ্রেসিভ হয়।

Currying with Lambda Expressions:

import java.util.function.Function;

public class CurryingWithLambda {
    public static void main(String[] args) {
        // Currying using Lambda expressions
        Function<Integer, Function<Integer, Integer>> multiply = x -> y -> x * y;

        // Using the curried function with lambda expressions
        System.out.println(multiply.apply(3).apply(4));  // Output: 12
    }
}

এখানে, multiply ফাংশনটি একটি lambda expression ব্যবহার করে যেটি প্রথমে x নেয় এবং পরে দ্বিতীয় আর্গুমেন্ট y নেয়ার জন্য একটি নতুন ফাংশন রিটার্ন করে। এইভাবে Currying ব্যবহার করা হয় যাতে একে একে আর্গুমেন্টগুলিকে ফাংশন কলের মাধ্যমে প্রদান করা যায়।


Currying এর সুবিধা:

  1. Partial Function Application: Currying এর মাধ্যমে আপনি ফাংশনকে আংশিকভাবে অ্যাপ্লাই করতে পারেন। অর্থাৎ, কিছু আর্গুমেন্ট প্রদান করে ফাংশনটি বন্ধ করে দিতে পারেন এবং পরবর্তীতে শুধুমাত্র বাকি আর্গুমেন্ট দিয়ে ফাংশনটি কল করতে পারেন।
  2. Code Reusability: Currying ফাংশনের মাধ্যমে আপনি একাধিক ক্ষেত্রে একটি ফাংশনকে বিভিন্নভাবে ব্যবহার করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
  3. Simpler Code: ফাংশনের মাধ্যমে আর্গুমেন্টগুলো স্টেপ বাই স্টেপ প্রদান করা কোডের কাঠামো এবং লজিককে আরও পরিষ্কার ও সহজ করে তোলে।
  4. Functional Composition: Currying ফাংশনগুলোকে একে অপরের সাথে যুক্ত করা খুব সহজ, যা functional composition কে সহজ করে তোলে।

Currying এবং Lambda Expressions এর মধ্যে সম্পর্ক:

  • Lambda Expressions Java তে ফাংশনাল প্রোগ্রামিংয়ের ধারণাকে বাস্তবায়িত করতে সাহায্য করে এবং Currying এর কার্যকরী বাস্তবায়ন করার জন্য আদর্শ টুল।
  • Lambda Expressions এর মাধ্যমে higher-order functions এবং partial application সহজেই ব্যবহার করা যায়, যা Currying এর কাজকে আরও সহজ করে তোলে।

Currying এবং Lambda Expressions এর একসাথে ব্যবহার (চলমান উদাহরণ):

import java.util.function.Function;

public class CurryingAndLambda {
    public static void main(String[] args) {
        // Currying using lambda expressions
        Function<Integer, Function<Integer, Function<Integer, Integer>>> addThreeNumbers = x -> y -> z -> x + y + z;

        // Using currying to add three numbers
        int result = addThreeNumbers.apply(5).apply(3).apply(2);
        System.out.println(result);  // Output: 10
    }
}

এখানে, addThreeNumbers একটি curried function যা তিনটি আর্গুমেন্ট নেয়। প্রথম আর্গুমেন্ট 5 নেওয়ার পর, এটি একটি নতুন ফাংশন রিটার্ন করে যা পরবর্তী আর্গুমেন্ট 3 গ্রহণ করবে এবং শেষ পর্যন্ত অন্য ফাংশন একটি নতুন আর্গুমেন্ট 2 নেবে এবং তিনটি সংখ্যার যোগফল রিটার্ন করবে।


সারাংশ:

  • Currying হল একটি ফাংশনাল প্রোগ্রামিং কনসেপ্ট, যেখানে একটি ফাংশন একাধিক আর্গুমেন্ট নেওয়ার পরিবর্তে ধাপে ধাপে আর্গুমেন্ট নেয় এবং একাধিক ফাংশন রিটার্ন করে।
  • Lambda Expressions Java 8 এ পরিচিতি পেয়েছে এবং Currying এর কার্যকরী বাস্তবায়নের জন্য এটি অত্যন্ত শক্তিশালী টুল।
  • Currying এবং Lambda Expressions এর মাধ্যমে আমরা ফাংশনাল প্রোগ্রামিংয়ের কোডকে আরও সংক্ষিপ্ত, পরিষ্কার, এবং পুনঃব্যবহারযোগ্য করতে পারি।

Currying এবং Lambda Expressions ব্যবহার করে আপনি আরও ফাংশনাল, মডুলার এবং পরিষ্কার কোড লিখতে পারবেন, যা কোডের রক্ষণাবেক্ষণ এবং উন্নয়ন আরও সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...