Custom Functional Interface তৈরি করা

Functional Interfaces - জাভা ফাংশনাল প্রোগ্রামিং (Java Functional Programming) - Java Technologies

319

Functional Interface হল একটি ইন্টারফেস যা শুধুমাত্র একটিমাত্র abstract method ধারণ করে। Java 8 এর পর থেকে, আপনি functional interfaces ব্যবহার করতে পারেন, যা Lambda expressions বা method references এর মাধ্যমে ফাংশনাল প্রোগ্রামিং বাস্তবায়নে সহায়ক। java.util.function প্যাকেজে বেশ কিছু বিল্ট-ইন ফাংশনাল ইন্টারফেস রয়েছে, তবে আপনি নিজের custom functional interface তৈরি করতে পারেন যা আপনার প্রয়োজন অনুযায়ী কাস্টম লজিক বাস্তবায়ন করে।

এখানে Custom Functional Interface তৈরি করার পুরো প্রক্রিয়া বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।


1. Custom Functional Interface তৈরি করা

ফাংশনাল ইন্টারফেস তৈরি করতে, @FunctionalInterface annotation ব্যবহার করা উত্তম, যদিও এটি বাধ্যতামূলক নয়। এটি শুধুমাত্র ইন্টারফেসের মধ্যে একটিমাত্র abstract method থাকতে হবে, এবং আপনি যদি দুইটি বা তার বেশি abstract method যোগ করার চেষ্টা করেন, তবে কম্পাইলার ত্রুটি দেখাবে।

Custom Functional Interface উদাহরণ:

ধরা যাক, আমরা একটি ফাংশনাল ইন্টারফেস তৈরি করতে চাই যেটি দুইটি ইন্টিজার ইনপুট গ্রহণ করবে এবং তাদের যোগফল প্রদান করবে।

@FunctionalInterface
public interface IntegerOperation {
    int operate(int a, int b);  // Single abstract method

    // You can also have default or static methods
    default int square(int a) {
        return a * a;
    }
}

Explanation:

  • @FunctionalInterface: এটি এই ইন্টারফেসকে একটি ফাংশনাল ইন্টারফেস হিসেবে চিহ্নিত করে এবং একাধিক abstract method থাকলে কম্পাইলার ত্রুটি প্রদান করবে।
  • operate: এটি আমাদের একমাত্র abstract method, যা দুটি int ইনপুট নিয়ে একটি ফলাফল প্রদান করে।

2. Custom Functional Interface এর মাধ্যমে Lambda Expression ব্যবহার করা

আপনি যখন একটি Functional Interface তৈরি করেন, তখন আপনি Lambda Expression এর মাধ্যমে সেই ইন্টারফেসের abstract method বাস্তবায়ন করতে পারেন।

Lambda Expression উদাহরণ:

public class Main {
    public static void main(String[] args) {
        // Creating an instance of IntegerOperation using a lambda expression
        IntegerOperation add = (a, b) -> a + b;
        
        // Calling the 'operate' method using the lambda expression
        int result = add.operate(5, 3);
        System.out.println("Addition result: " + result);  // Output: 8
        
        // Using default method
        System.out.println("Square of 4: " + add.square(4));  // Output: 16
    }
}

Explanation:

  • Lambda Expression (a, b) -> a + b: এটি IntegerOperation ইন্টারফেসের operate মেথডের বাস্তবায়ন, যেখানে দুটি ইনপুট (a এবং b) গ্রহণ করে তাদের যোগফল প্রদান করা হয়।
  • Default Method: square(4) মেথডটি default হিসেবে ইন্টারফেসে প্রদান করা হয়েছিল, এবং এটি ব্যবহার করা হয়। default মেথডের মাধ্যমে ইন্টারফেসে লজিক সংযুক্ত করা সম্ভব।

3. Multiple Functional Interfaces (কমপ্লেক্স ফাংশনাল ইন্টারফেস)

একইভাবে, আপনি আরও জটিল ফাংশনাল ইন্টারফেস তৈরি করতে পারেন যেগুলিতে একাধিক abstract method থাকে, বা generic types ব্যবহার করতে পারেন।

Multiple Method Custom Functional Interface উদাহরণ:

@FunctionalInterface
public interface MathOperation<T> {
    T operate(T a, T b);  // Single abstract method for operation
    
    default T add(T a, T b) {
        return operate(a, b);
    }
    
    default T subtract(T a, T b) {
        return operate(a, b);
    }
}

Explanation:

  • এখানে, MathOperation একটি generic ইন্টারফেস, যার মাধ্যমে আপনি একাধিক ধরনের ডেটা টাইপের উপর addition এবং subtraction অপারেশন করতে পারেন।
  • default methods add() এবং subtract() ইন্টারফেসে লজিক সরবরাহ করছে, এবং operate() এর মাধ্যমে অপারেশনটি বাস্তবায়িত হচ্ছে।

Lambda Expression with Generic Interface উদাহরণ:

public class Main {
    public static void main(String[] args) {
        // Creating instance of MathOperation using lambda expression
        MathOperation<Integer> addIntegers = (a, b) -> a + b;
        MathOperation<Double> addDoubles = (a, b) -> a + b;
        
        // Perform addition and subtraction on integers
        System.out.println("Integer addition: " + addIntegers.add(5, 3));  // Output: 8
        System.out.println("Integer subtraction: " + addIntegers.subtract(5, 3));  // Output: 2

        // Perform addition on doubles
        System.out.println("Double addition: " + addDoubles.add(2.5, 3.7));  // Output: 6.2
    }
}

Explanation:

  • এখানে, MathOperation এবং MathOperation টাইপের উপর অপারেশন চালানো হচ্ছে। generic ইন্টারফেসের মাধ্যমে আপনি একই লজিক ব্যবহার করতে পারেন বিভিন্ন ধরনের ডেটা টাইপে।

4. Using Multiple Custom Functional Interfaces

Java তে আপনি একাধিক ফাংশনাল ইন্টারফেসও ব্যবহার করতে পারেন, যেমন একাধিক কম্পোজিশন বা বিভিন্ন স্ট্রিম অপারেশন করতে।

Multiple Functional Interfaces Example:

@FunctionalInterface
public interface StringOperation {
    String operate(String a, String b);
}

public class Main {
    public static void main(String[] args) {
        // Concatenation of two strings using lambda expression
        StringOperation concatenate = (a, b) -> a + " " + b;
        
        System.out.println(concatenate.operate("Hello", "World"));  // Output: Hello World
    }
}

Explanation:

  • StringOperation ইন্টারফেসে দুটি String ইনপুট নিয়ে তাদের concatenate করে দেয়।

5. Using Built-in Functional Interfaces

Java 8-এ java.util.function প্যাকেজে অনেক বিল্ট-ইন ফাংশনাল ইন্টারফেস আছে যেমন Function, Predicate, Consumer, Supplier ইত্যাদি, যা ফাংশনাল প্রোগ্রামিং সহজ করে তোলে। আপনি আপনার কাস্টম ইন্টারফেস এবং বিল্ট-ইন ইন্টারফেস একসাথে ব্যবহার করতে পারেন।

Function Interface Example:

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<Integer, Integer> multiplyByTwo = x -> x * 2;
        System.out.println(multiplyByTwo.apply(5));  // Output: 10
    }
}

Explanation:

  • Function<Integer, Integer>: এটি একটি বিল্ট-ইন ফাংশনাল ইন্টারফেস যা একটি Integer ইনপুট গ্রহণ করে এবং একটি Integer আউটপুট প্রদান করে।

সারাংশ

Java তে Custom Functional Interface তৈরি করা খুবই সহজ এবং কার্যকরী। আপনি Lambda Expressions এবং Method References এর মাধ্যমে এই ইন্টারফেসগুলির ব্যবহার করতে পারেন এবং কার্যকারিতা বৃদ্ধি করতে পারেন। Java 8 এর পর থেকে Functional Interfaces এবং Lambda Expressions এর সাহায্যে কোড আরও সংক্ষিপ্ত এবং ক্লিন করা সম্ভব, যা ফাংশনাল প্রোগ্রামিং প্যাটার্নে কোড লেখার একটি উন্নত পদ্ধতি।

  • Custom Functional Interface তৈরি করতে @FunctionalInterface annotation ব্যবহার করুন।
  • Lambda Expressions এবং Method References ব্যবহার করে ইন্টারফেসের মেথড গুলি ইমপ্লিমেন্ট করুন।
  • Generic Types এবং Multiple Methods ব্যবহার করে আরও শক্তিশালী কাস্টম ইন্টারফেস তৈরি করুন।
Content added By
Promotion

Are you sure to start over?

Loading...