Java 8-এ Optional ক্লাসটি java.util প্যাকেজে অন্তর্ভুক্ত করা হয়েছে, যা মূলত null মানকে নিরাপদভাবে পরিচালনা করার জন্য তৈরি করা হয়েছে। Optional একটি wrapper ক্লাস হিসেবে কাজ করে এবং একটি অবজেক্ট ধারণ করে যেটি হতে পারে null অথবা কোনো বৈধ মান (non-null)। এটি null পয়েন্টার এক্সেপশন (NullPointerException) এড়াতে সাহায্য করে এবং কোডের নিরাপত্তা ও স্থায়িত্ব বৃদ্ধি করে।
Optional ক্লাসে কিছু গুরুত্বপূর্ণ মেথড আছে যেগুলি Optional অবজেক্টের সাথে কাজ করার সময় ব্যবহার করা হয়। এই মেথডগুলির মধ্যে সবচেয়ে প্রচলিত হল isPresent(), ifPresent(), এবং **orElse()**।
১. isPresent() Method
isPresent() মেথডটি Optional অবজেক্টের মধ্যে কোনো মান আছে কিনা তা চেক করে। এটি true রিটার্ন করে যদি অবজেক্টে কোনো মান থাকে এবং false রিটার্ন করে যদি তা null হয়।
Syntax:
boolean isPresent();ব্যবহার উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.of("Hello, World!");
if (optionalValue.isPresent()) {
System.out.println("Value is present: " + optionalValue.get());
} else {
System.out.println("No value present.");
}
}
}এখানে, isPresent() মেথড চেক করে যে optionalValue তে কোনো মান আছে কিনা। যদি মান থাকে, তবে get() মেথডের মাধ্যমে সেটি রিটার্ন করা হয়।
২. ifPresent() Method
ifPresent() মেথডটি একটি Consumer ফাংশন গ্রহণ করে এবং Optional অবজেক্টের মধ্যে যদি কোনো মান থাকে তবে সেই ফাংশনটি চালানো হয়। এটি একটি side-effect হিসেবে কাজ করে এবং মানটির উপর কোনো অপারেশন সম্পাদন করতে ব্যবহৃত হয়। যদি Optional অবজেক্টটি খালি (null) হয়, তাহলে কিছুই ঘটবে না।
Syntax:
void ifPresent(Consumer<? super T> action);ব্যবহার উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.of("Hello, World!");
optionalValue.ifPresent(value -> System.out.println("Value is: " + value));
// Optional.empty() এর উদাহরণ
Optional<String> emptyValue = Optional.empty();
emptyValue.ifPresent(value -> System.out.println("This won't be printed."));
}
}এখানে, ifPresent() মেথডটি optionalValue তে যদি কোনো মান থাকে, তবে সেই মানটি প্রিন্ট করবে। যদি Optional খালি থাকে (যেমন emptyValue), তবে কিছুই ঘটবে না।
৩. orElse() Method
orElse() মেথডটি একটি বিকল্প মান প্রদান করে যদি Optional অবজেক্টটি খালি (null) থাকে। এটি ডিফল্ট মান হিসেবে কাজ করে, যদি Optional তে কোনো মান না থাকে।
Syntax:
T orElse(T other);ব্যবহার উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.of("Hello, World!");
String result = optionalValue.orElse("Default Value");
System.out.println(result); // Output: Hello, World!
Optional<String> emptyValue = Optional.empty();
String defaultResult = emptyValue.orElse("Default Value");
System.out.println(defaultResult); // Output: Default Value
}
}এখানে, orElse() মেথডটি optionalValue তে যদি কোনো মান থাকে, তাহলে সেটি রিটার্ন করবে। অন্যথায়, এটি ডিফল্ট মান হিসেবে "Default Value" রিটার্ন করবে, যেমনটি emptyValue এর ক্ষেত্রে হচ্ছে।
৪. orElseGet() Method
orElseGet() মেথডটি orElse() মেথডের মতোই কাজ করে, তবে এর মধ্যে একটি ফাংশন থাকে যা ডিফল্ট মান জেনারেট করে। এটি lazy evaluation ব্যবহার করে, অর্থাৎ শুধুমাত্র যখন এটি প্রয়োজন হবে তখনই ডিফল্ট মানটি তৈরি করা হবে।
Syntax:
T orElseGet(Supplier<? extends T> other);ব্যবহার উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> emptyValue = Optional.empty();
String result = emptyValue.orElseGet(() -> "Generated Default Value");
System.out.println(result); // Output: Generated Default Value
}
}এখানে, orElseGet() একটি Supplier ফাংশন গ্রহণ করে এবং Optional খালি থাকলে সেই ফাংশন থেকে ডিফল্ট মান তৈরি করে রিটার্ন করে।
সারসংক্ষেপ
Java 8-এ Optional ক্লাসটি null চেক করার জন্য একটি শক্তিশালী উপায় সরবরাহ করে। isPresent(), ifPresent(), এবং orElse() মেথডগুলি Optional অবজেক্টের সাথে কাজ করার সময় নিরাপদ এবং কার্যকরী উপায় সরবরাহ করে:
isPresent(): চেক করে যেOptionalঅবজেক্টে মান আছে কিনা।ifPresent(): কোনো মান থাকলে একটিConsumerফাংশন চালায়।orElse():Optionalখালি থাকলে একটি ডিফল্ট মান প্রদান করে।orElseGet():Optionalখালি থাকলে একটি ডিফল্ট মান জেনারেট করতেSupplierফাংশন ব্যবহার করে।
এই মেথডগুলো null পয়েন্টার এক্সেপশন থেকে রক্ষা করতে সহায়ক এবং কোডকে আরও পরিষ্কার ও পাঠযোগ্য করে তোলে।
Read more