Functional Interface হল এমন একটি ইন্টারফেস যা শুধুমাত্র একটি abstrct মেথড (abstract method) ধারণ করে। Java 8-এ Functional Interface এর ধারণাটি পরিচিত হয় এবং এটি Lambda Expressions এবং Stream API সহ ব্যবহার করা হয়। Functional Interfaces মূলত Lambda Expressions বা Method References ব্যবহার করে তাদের কার্যকারিতা সরবরাহ করতে সক্ষম হয়। Java Functional Interface এমন একটি ইন্টারফেস যা একটি মেথড ছাড়া কোনো অন্যান্য মেথড থাকতে পারে (যেগুলো ডিফল্ট বা স্ট্যাটিক মেথড হতে পারে)।
Functional Interface এর বৈশিষ্ট্য:
- এটি একটি abstrct মেথড থাকতে হবে।
- এটি default বা static মেথড থাকতে পারে, তবে abstract মেথড সংখ্যা একটির বেশি থাকতে পারে না।
@FunctionalInterfaceঅ্যানোটেশন ব্যবহার করে একটি ইন্টারফেসকে পরিষ্কারভাবে Functional Interface হিসেবে চিহ্নিত করা হয়, যদিও এটি ঐচ্ছিক (optional), তবে এটি কোডের পাঠযোগ্যতা এবং নির্ভুলতা উন্নত করে।
Functional Interface এর উদাহরণ:
1. সাধারণ Functional Interface:
@FunctionalInterface
interface MyFunctionalInterface {
void doSomething(); // একমাত্র abstract method
// default method (ঐচ্ছিক)
default void sayHello() {
System.out.println("Hello from the default method!");
}
// static method (ঐচ্ছিক)
static void sayGoodbye() {
System.out.println("Goodbye from the static method!");
}
}
এখানে, doSomething() মেথডটি abstract মেথড হিসেবে আছে, যা Functional Interface এর একমাত্র abstract মেথড। sayHello() একটি default মেথড এবং sayGoodbye() একটি static মেথড।
2. Lambda Expression এর মাধ্যমে Functional Interface ব্যবহার:
public class FunctionalInterfaceExample {
public static void main(String[] args) {
// Lambda Expression দিয়ে Functional Interface বাস্তবায়ন
MyFunctionalInterface myFunc = () -> System.out.println("Doing something...");
// মেথড কল
myFunc.doSomething();
// default method কল
myFunc.sayHello();
// static method কল
MyFunctionalInterface.sayGoodbye();
}
}
ব্যাখ্যা:
- এখানে,
MyFunctionalInterfaceএরdoSomething()মেথডটিLambda Expressionব্যবহার করে বাস্তবায়িত হয়েছে। sayHello()একটি default মেথড, তাই এটিmyFuncঅবজেক্টের মাধ্যমে কল করা সম্ভব।sayGoodbye()static মেথড, তাই এটি সরাসরি ইন্টারফেসের মাধ্যমে কল করা হয়।
3. Java 8-এ Java প্রাক-নির্ধারিত Functional Interfaces:
Java 8-এ অনেক প্রাক-নির্ধারিত Functional Interfaces রয়েছে, যা java.util.function প্যাকেজের মধ্যে পাওয়া যায়, যেমন:
Predicate<T>: একটি আর্গুমেন্ট নেয়ার পর boolean রিটার্ন করে।Function<T, R>: একটি আর্গুমেন্ট নেয়ার পর ফলস্বরূপ অন্য একটি ভ্যালু রিটার্ন করে।Consumer<T>: একটি আর্গুমেন্ট নেয়ার পর কিছু এক্সিকিউট করে (কিন্তু কিছু রিটার্ন করে না)।Supplier<T>: কিছু উৎপন্ন করে (কিন্তু কোন আর্গুমেন্ট নেয় না)।
উদাহরণ:
import java.util.function.*;
public class FunctionalInterfacesExample {
public static void main(String[] args) {
// Predicate Example
Predicate<Integer> isEven = (n) -> n % 2 == 0;
System.out.println(isEven.test(10)); // true
// Function Example
Function<Integer, Integer> square = (n) -> n * n;
System.out.println(square.apply(5)); // 25
// Consumer Example
Consumer<String> printMessage = (message) -> System.out.println(message);
printMessage.accept("Hello, this is a Consumer Example!"); // Hello, this is a Consumer Example!
// Supplier Example
Supplier<String> getMessage = () -> "This is a Supplier Example!";
System.out.println(getMessage.get()); // This is a Supplier Example!
}
}
ব্যাখ্যা:
- Predicate isEven: এটি একটি
PredicateFunctional Interface যা একটিIntegerআর্গুমেন্ট নেয় এবং তার উপর নির্ভর করে একটিbooleanফলাফল রিটার্ন করে। - Function<Integer, Integer> square: এটি একটি
FunctionFunctional Interface যা একটিIntegerইনপুট নিয়ে একটি নতুনIntegerরিটার্ন করে। - Consumer printMessage: এটি একটি
ConsumerFunctional Interface যা একটিStringইনপুট নেয় এবং কিছু প্রক্রিয়া করে (এখানে কেবল প্রিন্ট করছে)। - Supplier getMessage: এটি একটি
SupplierFunctional Interface যা কোন আর্গুমেন্ট না নিয়ে একটিStringরিটার্ন করে।
Functional Interface এর সুবিধা:
- Lambda Expression এর মাধ্যমে কোড কমানো: Functional Interface গুলি Lambda Expression এর মাধ্যমে সহজ এবং সংক্ষিপ্ত কোড লেখার সুযোগ দেয়।
- Stream API এর সাথে ব্যবহার: Java 8 এর Stream API অনেক জায়গায় Functional Interface ব্যবহার করে যেমন,
map(),filter(),reduce()ইত্যাদি। - কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ: Functional Interface কোডকে আরো পাঠযোগ্য এবং কমপ্যাক্ট করে তোলে, যা রক্ষণাবেক্ষণ সহজ করে।
- অন্যান্য ফাংশনাল প্রোগ্রামিং সুবিধা: Functional Interface এর মাধ্যমে Java ফাংশনাল প্রোগ্রামিং স্টাইল এবং অন্যান্য আধুনিক টেকনোলজির সুবিধা গ্রহণ করতে পারে।
Java Functional Interface এমন একটি ইন্টারফেস যা শুধুমাত্র একটি abstract মেথড রাখে, এবং এটি Lambda Expressions বা Method References এর সাথে একত্রিত হয়ে কার্যকরী হয়ে ওঠে। Java 8 এ আনা এই ধারণাটি কোডের গঠন এবং রক্ষণাবেক্ষণকে সহজতর করেছে এবং আধুনিক অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য একটি শক্তিশালী সুবিধা হয়ে দাঁড়িয়েছে।
Read more