Java 8-এ Functional Interfaces নতুন ধারণা হিসেবে অন্তর্ভুক্ত করা হয়েছে। একটি Functional Interface হল একটি ইন্টারফেস যা শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড ধারণ করে এবং এটি ল্যাম্বডা এক্সপ্রেশন বা মেথড রেফারেন্সের মাধ্যমে বাস্তবায়িত হতে পারে। Java 8-এ অনেক বিল্ট-ইন ফাংশনাল ইন্টারফেস আছে (যেমন Runnable, Callable, Predicate ইত্যাদি), তবে কখনও কখনও আমাদের কাস্টম ফাংশনাল ইন্টারফেস তৈরি করতে হয়।
Custom Functional Interface কী?
Custom Functional Interface হল একটি ফাংশনাল ইন্টারফেস যা ডেভেলপার নিজেই তৈরি করেন এবং এটি শুধুমাত্র একটিমাত্র অ্যাবস্ট্র্যাক্ট মেথড ধারণ করে।
Custom Functional Interface তৈরি করা
একটি কাস্টম ফাংশনাল ইন্টারফেস তৈরি করতে, আপনি @FunctionalInterface এনোটেশন ব্যবহার করতে পারেন (এটি স্বেচ্ছায় ব্যবহৃত হয়, তবে এটি কোডের পরিষ্কারতা বাড়ায়)। এই এনোটেশনটি নিশ্চিত করে যে ইন্টারফেসটি শুধুমাত্র একটিমাত্র অ্যাবস্ট্র্যাক্ট মেথড ধারণ করবে, এবং যদি এতে একাধিক অ্যাবস্ট্র্যাক্ট মেথড থাকে, তবে কম্পাইলার একটি ত্রুটি প্রদান করবে।
Custom Functional Interface তৈরি করার উদাহরণ:
@FunctionalInterface
public interface Calculator {
// একমাত্র অ্যাবস্ট্র্যাক্ট মেথড
int operate(int a, int b);
// ডিফল্ট মেথড (অবশ্যই কাজ করতে পারে)
default void printMessage() {
System.out.println("Calculator Operation");
}
}এখানে Calculator ইন্টারফেসটি একটি কাস্টম ফাংশনাল ইন্টারফেস, যেখানে একটি অ্যাবস্ট্র্যাক্ট মেথড operate() রয়েছে, যা দুটি পূর্ণসংখ্যার ইনপুট নেয় এবং তাদের উপর একটি অপারেশন সম্পাদন করে (যেমন যোগফল, বিয়োগফল ইত্যাদি)। printMessage() একটি ডিফল্ট মেথড যা অপশনালভাবে যুক্ত করা হয়েছে।
Custom Functional Interface ব্যবহার করা
কাস্টম ফাংশনাল ইন্টারফেস তৈরি করার পর, আমরা ল্যাম্বডা এক্সপ্রেশন বা মেথড রেফারেন্স ব্যবহার করে এটি ব্যবহার করতে পারি।
উদাহরণ ১: ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা
public class Main {
public static void main(String[] args) {
// ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে কাস্টম ইন্টারফেসে operate() মেথডের বাস্তবায়ন
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;
System.out.println("Sum: " + add.operate(5, 3)); // Output: 8
System.out.println("Product: " + multiply.operate(5, 3)); // Output: 15
add.printMessage(); // Output: Calculator Operation
}
}এখানে, আমরা Calculator ইন্টারফেসের operate() মেথডের বাস্তবায়ন ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে প্রদান করেছি। add এবং multiply এর মাধ্যমে আমরা দুটি অপারেশন (যোগফল এবং গুণফল) সম্পাদন করছি।
উদাহরণ ২: মেথড রেফারেন্স ব্যবহার করা
আপনি মেথড রেফারেন্সও ব্যবহার করতে পারেন। এর মাধ্যমে একটি বিদ্যমান মেথডকে ফাংশনাল ইন্টারফেসের মেথডের বাস্তবায়ন হিসেবে ব্যবহার করা হয়।
public class Main {
public static void main(String[] args) {
// মেথড রেফারেন্স ব্যবহার করে কাস্টম ইন্টারফেসে operate() মেথডের বাস্তবায়ন
Calculator add = Main::addNumbers;
System.out.println("Sum: " + add.operate(5, 3)); // Output: 8
}
// একটি আলাদা মেথড যা ফাংশনাল ইন্টারফেসের মেথডের বাস্তবায়ন হিসেবে কাজ করবে
public static int addNumbers(int a, int b) {
return a + b;
}
}এখানে, addNumbers মেথডটি Calculator ইন্টারফেসের operate() মেথডের বাস্তবায়ন হিসেবে ব্যবহার করা হয়েছে মেথড রেফারেন্সের মাধ্যমে।
Custom Functional Interface এর সুবিধা
- কম্প্যাক্ট কোড (Compact Code): কাস্টম ফাংশনাল ইন্টারফেসগুলি Java-তে কোডের পরিমাণ কমায় এবং ফাংশনাল প্রোগ্রামিং ধারণার উপর ভিত্তি করে আরও পরিষ্কার ও সহজ কোড লেখার সুযোগ দেয়।
- ফাংশনাল প্রোগ্রামিং সমর্থন (Support for Functional Programming): কাস্টম ফাংশনাল ইন্টারফেস Java-তে ফাংশনাল প্রোগ্রামিং এর ধারণা সহজভাবে প্রয়োগ করতে সহায়ক। আপনি মেথড রেফারেন্স এবং ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে কমপ্যাক্ট ও শক্তিশালী কোড লিখতে পারেন।
- ডিফল্ট মেথড সমর্থন (Support for Default Methods): কাস্টম ফাংশনাল ইন্টারফেসে ডিফল্ট মেথড যুক্ত করা সম্ভব, যা কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং আগের কোডে কোনো পরিবর্তন ছাড়া নতুন বৈশিষ্ট্য যুক্ত করতে সহায়ক।
- ইন্টারফেস এবং ক্লাসের মধ্যে পার্থক্য (Difference between Interface and Class): ফাংশনাল ইন্টারফেস ব্যবহার করে আপনি কোডের দৃঢ়তা ও স্থায়িত্ব বজায় রাখতে পারেন, কারণ আপনি শুধুমাত্র একটিমাত্র অ্যাবস্ট্র্যাক্ট মেথড বাস্তবায়ন করতে পারবেন।
সারসংক্ষেপ
Java-তে Custom Functional Interface তৈরি এবং ব্যবহার করা একটি শক্তিশালী উপায় যা ডেভেলপারদের ফাংশনাল প্রোগ্রামিং ধারণাকে বাস্তবায়ন করতে সহায়ক। ল্যাম্বডা এক্সপ্রেশন এবং মেথড রেফারেন্সের মাধ্যমে আপনি সহজ এবং কম কোডের মধ্যে কার্যকরী ফাংশনাল কোড তৈরি করতে পারেন। এই কাস্টম ইন্টারফেসগুলি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং সিস্টেমের মডুলারিটি উন্নত করে।
Read more