Java 8-এ Optional ক্লাসটি একটি বিশেষ ধরনের wrapper হিসেবে কাজ করে যা null ভ্যালু থেকে নিরাপদে কাজ করতে সাহায্য করে। Optional ব্যবহার করে আপনি null চেকের ঝামেলা এড়িয়ে কার্যকরভাবে ডেটা ম্যানিপুলেশন করতে পারেন এবং এটি NullPointerException থেকে রক্ষা করে। এটি মূলত ঐসব ক্ষেত্রেই ব্যবহার হয় যেখানে একটি ভ্যালু থাকতে পারে বা না-ও থাকতে পারে।
Optional সাধারণত null চেকিং কমপ্লেক্সিটি কমাতে ব্যবহৃত হয় এবং ফাংশনাল প্রোগ্রামিং স্টাইলে ডেটা পরিচালনা করার জন্য সহায়ক।
১. Optional ক্লাসের মৌলিক ব্যবহার
Optional ক্লাসটি একটি কন্টেইনার অবজেক্ট হিসেবে কাজ করে যা একটি ভ্যালু ধারণ করতে পারে বা null হতে পারে। এটি ব্যবহার করার মাধ্যমে null চেক করা সহজ হয়ে ওঠে এবং কোডকে আরও নিরাপদ ও পরিষ্কার করা যায়।
Optional তৈরি করা:
Optional তৈরি করার জন্য কয়েকটি মেথড রয়েছে:
Optional.of(T value)– যদি ভ্যালুnullনা হয় তবে এটি একটিOptionalতৈরি করে।Optional.ofNullable(T value)– এটিnullভ্যালু থাকতে পারে, তাই এটিOptionalতৈরি করতে পারে।Optional.empty()– একটি খালিOptionalতৈরি করে।
উদাহরণ:
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// Optional তৈরি করা
Optional<String> name = Optional.of("John");
Optional<String> emptyName = Optional.empty(); // Empty Optional
System.out.println(name.get()); // Output: John
System.out.println(emptyName.isPresent()); // Output: false
}
}২. Optional এর মাধ্যমে null চেক
Optional ব্যবহার করে আপনি null চেক করার পদ্ধতি সহজ করতে পারেন। isPresent() মেথড ব্যবহার করে আপনি চেক করতে পারেন যে Optional কন্টেইনারে কোন ভ্যালু আছে কিনা, এবং ifPresent() ব্যবহার করে শুধুমাত্র যখন ভ্যালু থাকে তখন কোনো কোড এক্সিকিউট করতে পারেন।
উদাহরণ:
Optional<String> name = Optional.ofNullable(null);
if (name.isPresent()) {
System.out.println("Name is present: " + name.get());
} else {
System.out.println("Name is absent");
}এখানে isPresent() চেক করে যে name এর মধ্যে ভ্যালু আছে কিনা।
৩. orElse() এবং orElseGet() মেথড
Optional এর মধ্যে ভ্যালু না থাকলে, আপনি ডিফল্ট ভ্যালু প্রদান করতে পারেন orElse() মেথডের মাধ্যমে, অথবা orElseGet() মেথডের মাধ্যমে আপনি একটি Supplier ব্যবহার করতে পারেন।
উদাহরণ:
Optional<String> name = Optional.ofNullable(null);
String result = name.orElse("Default Name");
System.out.println(result); // Output: Default Nameএখানে, যদি name এর মধ্যে কোনো ভ্যালু না থাকে, তবে "Default Name" প্রদান করা হবে।
orElseGet() মেথড তখন ব্যবহৃত হয় যখন ডিফল্ট ভ্যালু একটি কমপ্লেক্স বা প্রোগ্রামেটিক ক্যালকুলেশন থেকে আসবে। এটি একটি Supplier গ্রহণ করে।
উদাহরণ:
Optional<String> name = Optional.ofNullable(null);
String result = name.orElseGet(() -> "Generated Default Name");
System.out.println(result); // Output: Generated Default Name৪. map() এবং flatMap() মেথড
map() এবং flatMap() হল দুটি খুব গুরুত্বপূর্ণ মেথড যা Optional এর সাথে ডেটা ম্যানিপুলেশনের জন্য ব্যবহার করা হয়।
map()একটি ফাংশনাল অপারেশন গ্রহণ করে এবংOptionalএর ভিতরের ভ্যালুকে ট্রান্সফর্ম করে।flatMap()ব্যবহার হয় যখন আপনি আরেকটিOptionalভ্যালু ফিরে পেতে চান, অর্থাৎ nestedOptionalগঠন করতে।
উদাহরণ: map() ব্যবহার
Optional<String> name = Optional.of("John");
Optional<String> upperCaseName = name.map(String::toUpperCase);
System.out.println(upperCaseName.get()); // Output: JOHNএখানে, map() মেথড name এর ভ্যালুকে uppercase এ রূপান্তর করেছে।
উদাহরণ: flatMap() ব্যবহার
Optional<String> name = Optional.of("John");
Optional<String> nameLength = name.flatMap(n -> Optional.of("Length: " + n.length()));
System.out.println(nameLength.get()); // Output: Length: 4এখানে, flatMap() ভ্যালু পরিবর্তন করে একটি নতুন Optional তৈরি করেছে, এবং এটি nested Optional কে সমাধান করেছে।
৫. filter() মেথড
filter() মেথডটি Optional এর মধ্যে থাকা ভ্যালুর উপর একটি শর্ত প্রয়োগ করতে ব্যবহৃত হয়। এটি যদি শর্ত পূর্ণ হয় তবে সেই ভ্যালুটিকে ফেরত দেয়, অন্যথায় একটি খালি Optional প্রদান করে।
উদাহরণ:
Optional<String> name = Optional.of("John");
Optional<String> filteredName = name.filter(n -> n.startsWith("J"));
System.out.println(filteredName.get()); // Output: John
Optional<String> emptyName = name.filter(n -> n.startsWith("A"));
System.out.println(emptyName.isPresent()); // Output: falseএখানে, প্রথম filter() মেথডটি "John" এর উপর শর্ত প্রয়োগ করেছে এবং সফল হয়েছে, তবে দ্বিতীয় filter() মেথডটি "A" দিয়ে শুরু না হওয়ায় খালি Optional ফেরত দিয়েছে।
৬. ifPresent() মেথড
ifPresent() মেথডটি Optional এর মধ্যে একটি ভ্যালু থাকলে কোনো কোড এক্সিকিউট করে। এটি একটি Consumer প্রক্রিয়া নেয়, যা যদি ভ্যালু উপস্থিত থাকে তবে এক্সিকিউট হয়।
উদাহরণ:
Optional<String> name = Optional.of("John");
name.ifPresent(n -> System.out.println("Hello, " + n)); // Output: Hello, Johnএখানে, যদি name এর মধ্যে কোনো ভ্যালু থাকে তবে এটি একটি মেসেজ প্রিন্ট করবে।
সারসংক্ষেপ
OptionalJava 8 এর একটি শক্তিশালী বৈশিষ্ট্য যাnullভ্যালু ব্যবহারের ঝামেলা এড়ানোর জন্য ব্যবহৃত হয়।map()এবংflatMap()ডেটা ট্রান্সফর্ম করতে সাহায্য করে।filter()শর্ত প্রয়োগ করে ডেটা ফিল্টার করে।orElse()এবংorElseGet()ডিফল্ট ভ্যালু প্রদান করে।ifPresent()একটি ভ্যালু উপস্থিত থাকলে কোন অ্যাকশন নিতে সাহায্য করে।
Optional ব্যবহার করে আপনি নিরাপদভাবে এবং কার্যকরভাবে ডেটা ম্যানিপুলেশন করতে পারেন এবং কোডের পঠনযোগ্যতা ও স্থায়িত্ব উন্নত করতে পারেন।
Read more