Java Functional Programming হল একটি প্রোগ্রামিং প্যারাডাইম যেখানে ফাংশনগুলি প্রথম শ্রেণীর নাগরিক (first-class citizens) হিসেবে ব্যবহৃত হয়। Java 8 থেকে Functional Interfaces এবং Lambda Expressions ইন্ট্রডিউস করা হয়েছে যা ফাংশনাল প্রোগ্রামিংয়ের ধারণাকে Java তে বাস্তবায়িত করেছে।
Functional Interfaces এমন interfaces, যেগুলির শুধুমাত্র একটি abstract method থাকে, এবং এগুলি lambda expressions এবং method references ব্যবহার করে আরও সহজভাবে কাজে লাগানো যায়। Java এর কিছু বিল্ট-ইন Functional Interfaces রয়েছে যা বিশেষ করে Runnable, Callable, এবং Comparator।
নিচে আমরা এই তিনটি Functional Interface (Runnable, Callable, Comparator) সম্পর্কে বিস্তারিত জানব এবং তাদের ব্যবহার উদাহরণসহ দেখব।
1. Runnable Interface
Runnable হল একটি Functional Interface যা java.lang প্যাকেজে অবস্থিত এবং এর একটি একমাত্র run() মেথড থাকে। এটি threading ব্যবস্থাপনায় ব্যবহৃত হয়, যেখানে run() মেথডের মধ্যে থ্রেডের কার্যক্রম নির্ধারণ করা হয়।
Runnable Interface এর বৈশিষ্ট্য:
- এটি কোন আর্গুমেন্ট নেয় না এবং কোন ভ্যালু রিটার্নও করে না।
- এটি সাধারণত multithreading বা asynchronous tasks এর জন্য ব্যবহৃত হয়।
Runnable Interface উদাহরণ (lambda expression):
public class RunnableExample {
public static void main(String[] args) {
// Using Runnable with a Lambda Expression
Runnable task = () -> {
System.out.println("Running in a separate thread");
};
// Running the task using a thread
Thread thread = new Thread(task);
thread.start();
}
}
এখানে, Runnable interface এর run() মেথড একটি lambda expression দিয়ে সংজ্ঞায়িত করা হয়েছে এবং Thread এ চলানো হয়েছে।
2. Callable Interface
Callable হল একটি Functional Interface যা java.util.concurrent প্যাকেজে অবস্থিত এবং এর মধ্যে একটি মাত্র call() মেথড থাকে। Callable interface এর মেইন পার্থক্য হল যে এটি Runnable এর তুলনায় একটি ভ্যালু রিটার্ন করে এবং এটি Exception থ্রো করতে পারে।
Callable Interface এর বৈশিষ্ট্য:
- Callable interface এর
call()মেথড একটি value রিটার্ন করে, যেখানে Runnable কোন ভ্যালু রিটার্ন করে না। - এটি exceptions handle করতে সক্ষম, যা Runnable এর ক্ষেত্রে সম্ভব নয়।
Callable Interface উদাহরণ (lambda expression):
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class CallableExample {
public static void main(String[] args) throws Exception {
// Using Callable with a Lambda Expression
Callable<Integer> task = () -> {
// Simulating some computation
return 10 + 20;
};
// Wrapping the Callable in a FutureTask
FutureTask<Integer> futureTask = new FutureTask<>(task);
// Running the task in a new thread
Thread thread = new Thread(futureTask);
thread.start();
// Getting the result
System.out.println("Result: " + futureTask.get()); // Output: Result: 30
}
}
এখানে, Callable interface এর call() মেথড একটি lambda expression দিয়ে সংজ্ঞায়িত করা হয়েছে এবং FutureTask ব্যবহার করে থ্রেডে রান করা হয়েছে। get() মেথডের মাধ্যমে রিটার্ন ভ্যালু পাওয়া যাচ্ছে।
3. Comparator Interface
Comparator হল একটি Functional Interface যা java.util প্যাকেজে অবস্থিত এবং এটি two-object comparison করার জন্য ব্যবহৃত হয়। compare(T o1, T o2) মেথড দিয়ে এটি দুটি অবজেক্টের তুলনা করে এবং সেই অনুযায়ী তাদের সাজানো বা অর্ডার করা হয়।
Comparator Interface এর বৈশিষ্ট্য:
- এটি দুটি অবজেক্টের তুলনা করে এবং একটি negative, zero, বা positive ভ্যালু রিটার্ন করে।
- সাধারণত এটি sorting এবং ordering এর জন্য ব্যবহৃত হয়।
Comparator Interface উদাহরণ (lambda expression):
import java.util.Arrays;
import java.util.Comparator;
public class ComparatorExample {
public static void main(String[] args) {
// Sample data
String[] names = {"Alice", "Bob", "Charlie", "David"};
// Using Comparator with Lambda Expression to sort alphabetically
Arrays.sort(names, (name1, name2) -> name1.compareTo(name2));
// Printing sorted names
System.out.println(Arrays.toString(names)); // Output: [Alice, Bob, Charlie, David]
}
}
এখানে, Comparator interface এর compare() মেথড একটি lambda expression দিয়ে সংজ্ঞায়িত করা হয়েছে এবং Arrays.sort() এর মাধ্যমে তালিকা সাজানো হয়েছে।
Runnable, Callable, Comparator এর মধ্যে পার্থক্য:
| Feature | Runnable | Callable | Comparator |
|---|---|---|---|
| Package | java.lang | java.util.concurrent | java.util |
| Methods | void run() | V call() | int compare(T o1, T o2) |
| Return Value | No return value | Returns a value of type V | Returns an integer (-ve, 0, +ve) |
| Exception Handling | Does not throw exceptions | Can throw exceptions | Does not throw exceptions |
| Usage | Used for threads without result | Used for threads that return a result | Used for comparing two objects |
| Default Implementations | Default implementations are available | Default implementations are available | No default implementations |
সারাংশ:
- Runnable: এই interface ব্যবহৃত হয় যখন আপনি থ্রেডে কোনো কাজ চালাতে চান, কিন্তু কাজের শেষে কোনো ভ্যালু রিটার্ন করার প্রয়োজন নেই।
- Callable: এটি থ্রেডে কাজের শেষে একটি ভ্যালু রিটার্ন করতে সক্ষম এবং এটি exception থ্রো করতে পারে। এটি সাধারণত asynchronous কাজের জন্য ব্যবহৃত হয়।
- Comparator: এটি দুটি অবজেক্টের তুলনা করতে ব্যবহৃত হয় এবং sorting বা ordering এর জন্য কাজ করে।
Functional Interfaces এর মাধ্যমে Java 8 থেকে ফাংশনাল প্রোগ্রামিংয়ের ধারণা বাস্তবায়িত হয়েছে এবং lambda expressions ব্যবহার করে কোড আরও সংক্ষিপ্ত ও পরিষ্কার করা সম্ভব হয়েছে।
Read more