Functor কি?
অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor হল একটি সাধারণ প্রোগ্রামিং কনসেপ্ট, যা একটি কোড ব্লক বা লজিক্যাল ফাংশনালিটি হিসেবে কাজ করে। এটি একটি অবজেক্ট যা একটি বা একাধিক ইনপুট গ্রহণ করে এবং একটি আউটপুট প্রদান করে, অথবা কোনো প্রভাব (side effect) তৈরি করে।
জাভাতে, Functor সাধারণত একটি ইন্টারফেস হিসেবে তৈরি হয়, যা একটি নির্দিষ্ট পদ্ধতি (method) বাস্তবায়ন করে। অ্যাপাচি কমন্স কালেকশনস Functor ব্যবহার করে বিভিন্ন ফাংশনাল অপারেশন (যেমন ফিল্টারিং, ট্রান্সফর্মেশন) সহজ করে।
Functor এর প্রকারভেদ
অ্যাপাচি কমন্স কালেকশনস-এ চারটি প্রধান ধরনের Functor রয়েছে:
১. Transformer
Transformer হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি প্রসেসিং সম্পন্ন করার পরে আউটপুট প্রদান করে।
ব্যবহার উদাহরণ: ডেটা রূপান্তরের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class TransformerExample {
public static void main(String[] args) {
// Transformer তৈরি
Transformer<Integer, String> transformer = input -> "Number: " + input;
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// ডেটা রূপান্তর
List<String> transformed = new ArrayList<>(CollectionUtils.collect(numbers, transformer));
System.out.println(transformed);
}
}
আউটপুট:
[Number: 1, Number: 2, Number: 3]
২. Predicate
Predicate হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি বুলিয়ান (true/false) মান প্রদান করে।
ব্যবহার উদাহরণ: ডেটা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class PredicateExample {
public static void main(String[] args) {
// Predicate তৈরি
Predicate<Integer> isEven = input -> input % 2 == 0;
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
// ডেটা ফিল্টারিং
List<Integer> evenNumbers = new ArrayList<>(CollectionUtils.select(numbers, isEven));
System.out.println(evenNumbers);
}
}
আউটপুট:
[2, 4]
৩. Closure
Closure একটি Functor যা একটি ইনপুট গ্রহণ করে এবং কোনো রিটার্ন না দিয়ে একটি নির্দিষ্ট কাজ সম্পন্ন করে।
ব্যবহার উদাহরণ: লুপিং বা ইনপুটের উপর কোনো কার্য সম্পাদনে ব্যবহৃত হয়।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class ClosureExample {
public static void main(String[] args) {
// Closure তৈরি
Closure<Integer> printClosure = input -> System.out.println("Processing: " + input);
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Closure প্রয়োগ
CollectionUtils.forAllDo(numbers, printClosure);
}
}
আউটপুট:
Processing: 1
Processing: 2
Processing: 3
৪. Factory
Factory একটি Functor যা কোনো ইনপুট ছাড়াই একটি নতুন অবজেক্ট তৈরি করে আউটপুট প্রদান করে।
ব্যবহার উদাহরণ: নির্দিষ্ট অবজেক্ট তৈরি করতে ব্যবহৃত হয়।
import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.ListUtils;
import java.util.List;
public class FactoryExample {
public static void main(String[] args) {
// Factory তৈরি
Factory<String> stringFactory = () -> "New String Object";
// Factory থেকে একটি নতুন লিস্ট তৈরি
List<String> newList = ListUtils.lazyList(ListUtils.emptyIfNull(null), stringFactory);
// লিস্টে আইটেম অ্যাক্সেস
newList.add("Hello");
System.out.println(newList.get(1)); // Factory ব্যবহার করে তৈরি হবে
}
}
আউটপুট:
New String Object
Functor এর উপযোগিতা
- কোড পুনরায় ব্যবহার: বারবার ব্যবহৃত হওয়া কোড ব্লকগুলোকে সংজ্ঞায়িত এবং পুনঃব্যবহারের সুযোগ দেয়।
- ডেটা প্রসেসিং সহজ করা: জটিল ডেটা ফিল্টারিং, রূপান্তর এবং অন্যান্য প্রক্রিয়া সহজ করে।
- মডিউলারিটি বৃদ্ধি: কোডকে ছোট, স্বাধীন এবং মডুলার অংশে ভাগ করতে সাহায্য করে।
সারাংশ
Functor হল অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির একটি শক্তিশালী বৈশিষ্ট্য, যা ডেটা ট্রান্সফরমেশন, ফিল্টারিং, এবং অন্যান্য কার্য সম্পাদনে ব্যবহৃত হয়। এর প্রকারভেদ (Transformer, Predicate, Closure, Factory) বিভিন্ন প্রয়োজন অনুযায়ী ডেটা প্রসেসিং সহজ করে তোলে।
Read more