Java 8 এ ফাংশনাল প্রোগ্রামিং ধারণা সমর্থিত হয়েছে এবং এর মধ্যে প্রধান দুটি বৈশিষ্ট্য হলো Functional Interfaces এবং Lambda Expressions। এই দুটি বৈশিষ্ট্য Java কোডকে আরও কমপ্যাক্ট, পরিষ্কার এবং কার্যকরী করতে সহায়ক।
Functional Interfaces
Functional Interface হলো এমন একটি ইন্টারফেস যা শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড (abstract method) ধারণ করে। তবে এতে ডিফল্ট (default) মেথড বা স্ট্যাটিক (static) মেথড থাকতে পারে। ফাংশনাল ইন্টারফেসগুলি Java 8 এর ফাংশনাল প্রোগ্রামিং সমর্থনে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ল্যাম্বডা এক্সপ্রেশন এর সাথে ব্যবহার করা হয়।
Java 8 এ @FunctionalInterface এনোটেশন যুক্ত করা হয়েছে, যা একটি ইন্টারফেসকে ফাংশনাল ইন্টারফেস হিসেবে চিহ্নিত করে। যদিও এই এনোটেশন ব্যবহার করা বাধ্যতামূলক নয়, এটি কোডের পরিষ্কারতা এবং স্বচ্ছতা বাড়াতে সহায়ক।
উদাহরণ:
@FunctionalInterface
interface Calculator {
int add(int a, int b); // একমাত্র অ্যাবস্ট্র্যাক্ট মেথড
// ডিফল্ট মেথড (optional)
default int multiply(int a, int b) {
return a * b;
}
// স্ট্যাটিক মেথড (optional)
static int subtract(int a, int b) {
return a - b;
}
}এই ইন্টারফেসে add() একটি অ্যাবস্ট্র্যাক্ট মেথড, যা কেবল একটি কার্যকরী মেথড। multiply() ডিফল্ট মেথড এবং subtract() একটি স্ট্যাটিক মেথড।
Functional Interface এর ব্যবহার:
Functional Interfaces ফাংশনাল প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়, যেমন:
PredicateFunctionConsumerSupplier
Lambda Expressions
Lambda Expressions Java 8 এ একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা কোড লেখার প্রক্রিয়া সহজ এবং আরও পরিষ্কার করে তোলে। এটি একটি ছোট, অ্যানোনিমাস ফাংশন বা কোড ব্লক হিসেবে কাজ করে যা ফাংশনাল ইন্টারফেসের জন্য একটি ইমপ্লিমেন্টেশন প্রদান করে।
ল্যাম্বডা এক্সপ্রেশন একটি ফাংশনাল ইন্টারফেসের একমাত্র মেথডের জন্য ইমপ্লিমেন্টেশন হিসেবে ব্যবহার করা হয়। এটি কোডের সঙ্কলন কমিয়ে এবং কার্যকারিতা বাড়িয়ে দেয়।
ল্যাম্বডা এক্সপ্রেশন এর সাধারণ সিনট্যাক্স:
(parameters) -> expressionউদাহরণ:
// ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা
Calculator add = (a, b) -> a + b; // add() মেথডের ইমপ্লিমেন্টেশন
System.out.println(add.add(5, 3)); // আউটপুট: 8এখানে add ফাংশনাল ইন্টারফেসের জন্য একটি ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা হয়েছে, যা দুটি সংখ্যার যোগফল প্রদান করে।
ল্যাম্বডা এক্সপ্রেশন এর বৈশিষ্ট্য:
- কমপ্যাক্ট কোড: ল্যাম্বডা এক্সপ্রেশন কোডকে আরও ছোট এবং পরিষ্কার করে।
- ফাংশনাল প্রোগ্রামিং: এটি Java 8 এ ফাংশনাল প্রোগ্রামিং ধারণা বাস্তবায়ন করতে সহায়ক।
- অ্যানোনিমাস ফাংশন: ল্যাম্বডা এক্সপ্রেশন ইন্টারফেসের জন্য অ্যানোনিমাস ফাংশন প্রদান করে, যেটি একটি অবজেক্টের মতো আচরণ করে।
- ফাংশনাল ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ: ল্যাম্বডা এক্সপ্রেশন শুধুমাত্র ফাংশনাল ইন্টারফেসের জন্য ব্যবহৃত হয়।
আরও একটি উদাহরণ:
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mia");
names.forEach(name -> System.out.println(name));এখানে forEach একটি স্ট্রিম অপারেশন, যা ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে প্রতিটি উপাদানকে প্রিন্ট করবে।
Lambda Expressions এবং Functional Interfaces এর সম্পর্ক
Java 8 এ Functional Interfaces এবং Lambda Expressions একে অপরের সাথে নিবিড়ভাবে সংযুক্ত। ফাংশনাল ইন্টারফেস একটি একক অ্যাবস্ট্র্যাক্ট মেথড প্রদান করে, এবং ল্যাম্বডা এক্সপ্রেশন সেই একক মেথডের জন্য একটি অ্যানোনিমাস ইমপ্লিমেন্টেশন সরবরাহ করে। এর ফলে কোড আরও পরিষ্কার, ছোট এবং ফাংশনাল প্রোগ্রামিং শৈলীতে লেখা হয়।
সারসংক্ষেপ
Functional Interfaces এবং Lambda Expressions Java 8 এর দুটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য। ফাংশনাল ইন্টারফেসগুলি এমন ইন্টারফেস যেগুলোর মধ্যে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড থাকে, এবং ল্যাম্বডা এক্সপ্রেশনগুলি এগুলোর জন্য অ্যানোনিমাস ফাংশন সরবরাহ করে। এই দুটি বৈশিষ্ট্য Java 8 কে আরও শক্তিশালী, কার্যকরী এবং আধুনিক করে তোলে, এবং ডেভেলপারদের কোড লেখার প্রক্রিয়া সহজ এবং দক্ষ করে তোলে।
Read more