Optional হল Java 8-এ পরিচিত একটি নতুন ক্লাস, যা java.util প্যাকেজের অংশ। এটি মূলত null মানের বিকল্প হিসেবে ব্যবহৃত হয় এবং এটি null safety নিশ্চিত করতে সহায়তা করে। সাধারণত, Java-তে null pointer exception (NPE) খুবই সাধারণ সমস্যা, যেখানে আপনি এমন কোনো অবজেক্ট অ্যাক্সেস করার চেষ্টা করেন যা null হয়ে থাকে। Optional ক্লাসটি এই সমস্যাটি মোকাবেলা করতে সাহায্য করে এবং কোডে আরও নিরাপত্তা যোগ করে।
Optional ক্লাসের বৈশিষ্ট্য:
- Null Safety:
Optionalক্লাস মূলত এমন পরিস্থিতি মোকাবেলা করতে ব্যবহৃত হয় যেখানে কোনো মান থাকতে পারে অথবা না-ও থাকতে পারে। এটি null মানের পরিবর্তে একটি Optional.empty() অবজেক্ট ফেরত দেয়, যা পরবর্তীতে কোন null pointer exception তৈরি করতে বাধা দেয়।
- Fluent API:
Optionalক্লাসটি method chaining এর মাধ্যমে কাজ করার সুবিধা দেয়। এর মাধ্যমে আপনি লজিক্যালভাবে মান যাচাই করার পর, পরবর্তী অপারেশন করতে পারবেন।
- Functional Programming:
Optionalক্লাসটি functional programming ধারণার সাথে সংযুক্ত। এটি কিছু ফাংশনাল মেথড (যেমনmap(),filter(),ifPresent()) সরবরাহ করে, যা কোডকে আরো সুন্দর এবং সহজ করে তোলে।
Optional ক্লাসের মূল মেথডসমূহ:
of(T value):- এটি এমন একটি
Optionalঅবজেক্ট তৈরি করে যা non-null মান ধারণ করে।
Optional<String> optional = Optional.of("Hello");- এটি এমন একটি
ofNullable(T value):- এটি একটি
Optionalঅবজেক্ট তৈরি করে যা null অথবা non-null মান ধারণ করতে পারে। যদি মান null হয়, তবে এটি একটিOptional.empty()ফেরত দেয়।
Optional<String> optional = Optional.ofNullable(null); System.out.println(optional.isPresent()); // Output: false- এটি একটি
empty():- এটি একটি খালি
Optionalঅবজেক্ট ফেরত দেয়।
Optional<String> optional = Optional.empty(); System.out.println(optional.isPresent()); // Output: false- এটি একটি খালি
get():- এটি
Optionalঅবজেক্ট থেকে মানটি ফেরত দেয়, তবে যদি মানটি null হয় তবে এটি NoSuchElementException ত্রুটি সৃষ্টি করবে। এটি সতর্কভাবে ব্যবহার করা উচিত, কারণ এটি unsafe।
Optional<String> optional = Optional.of("Hello"); System.out.println(optional.get()); // Output: Hello- এটি
isPresent():- এটি পরীক্ষা করে যে,
Optionalঅবজেক্টে কোনো মান উপস্থিত আছে কিনা।
Optional<String> optional = Optional.of("Hello"); System.out.println(optional.isPresent()); // Output: true- এটি পরীক্ষা করে যে,
ifPresent(Consumer<? super T> action):- যদি
Optionalঅবজেক্টে একটি মান উপস্থিত থাকে, তবে এটি সেই মানটি ব্যবহার করে একটি action সম্পাদন করে।
Optional<String> optional = Optional.of("Hello"); optional.ifPresent(s -> System.out.println(s.length())); // Output: 5- যদি
orElse(T other):- এটি যদি
Optionalঅবজেক্টে কোনো মান থাকে, তবে সেই মান ফেরত দেয়, অন্যথায়otherমান ফেরত দেয়।
Optional<String> optional = Optional.ofNullable(null); String result = optional.orElse("Default Value"); System.out.println(result); // Output: Default Value- এটি যদি
orElseGet(Supplier<? extends T> other):- এটি
orElseএর মতোই কাজ করে, তবে এখানেotherএকটিSupplierফাংশন হবে, যা কোনো মান সরবরাহ করবে। এটি কার্যকর যখন মান উৎপাদন একটি expensive অপারেশন হয়।
Optional<String> optional = Optional.ofNullable(null); String result = optional.orElseGet(() -> "Generated Value"); System.out.println(result); // Output: Generated Value- এটি
orElseThrow(Supplier<? extends X> exceptionSupplier):- এটি
Optionalএর মানটি ফেরত দেয়, কিন্তু যদি মান null হয়, তবে এটি exceptionSupplier থেকে একটি নতুন exception তৈরি করে তা থ্রো করে।
Optional<String> optional = Optional.ofNullable(null); String result = optional.orElseThrow(() -> new IllegalArgumentException("Value is missing"));- এটি
Optional ক্লাস ব্যবহার করার উদাহরণ:
Example 1: Null Safety with Optional
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String value = null;
// Using Optional to prevent NullPointerException
Optional<String> optionalValue = Optional.ofNullable(value);
// If value is present, print it, otherwise print default message
optionalValue.ifPresentOrElse(
System.out::println,
() -> System.out.println("Value is absent")
);
}
}
Output:
Value is absent
Example 2: Using Optional with Map
import java.util.Optional;
public class OptionalMapExample {
public static void main(String[] args) {
String name = "John";
// Using Optional and map to transform data
Optional<String> optionalName = Optional.ofNullable(name);
Optional<String> upperName = optionalName.map(String::toUpperCase);
System.out.println(upperName.orElse("Name is not available")); // Output: JOHN
}
}
Output:
JOHN
Example 3: Chaining Optionals
import java.util.Optional;
public class OptionalChainingExample {
public static void main(String[] args) {
Optional<String> name = Optional.ofNullable("Alice");
// Chaining multiple transformations
String result = name
.map(String::toUpperCase)
.filter(n -> n.startsWith("A"))
.orElse("Unknown");
System.out.println(result); // Output: ALICE
}
}
Output:
ALICE
Optional এর প্রয়োজনীয়তা:
- Null Safety:
Optionalক্লাসটি মূলত null pointer exception (NPE) প্রতিরোধের জন্য ব্যবহৃত হয়। এটি null মানের পরিবর্তে একটি Optional.empty() অবজেক্ট ফেরত দেয়, যা null কে এক্সেপশন হিসেবে না নিয়ে একটি নিরাপদ বিকল্প সরবরাহ করে।
- Better Code Readability:
Optionalব্যবহার করে কোড পরিষ্কার এবং পঠনযোগ্য হয়ে ওঠে।Optionalএর মাধ্যমে আপনি স্পষ্টভাবে বলছেন যে, একটি মান থাকতে পারে বা নাও থাকতে পারে, যা কোডের উদ্দেশ্য বুঝতে সহায়ক।
- Functional Programming:
- Optional ফাংশনাল প্রোগ্রামিং ধারণার অংশ হিসেবে ব্যবহৃত হয়। এর মাধ্যমে map(), filter(), ifPresent() এর মতো ফাংশনাল মেথড ব্যবহার করা যায়, যা কোড আরও সংক্ষিপ্ত এবং কার্যকরী করে।
- Avoiding Null Checks:
- Optional ব্যবহার করলে, null চেক করার জন্য বারবার কোড লিখতে হয় না। আপনি সরাসরি
ifPresent(),orElse()ইত্যাদি মেথড ব্যবহার করে সহজে null ব্যবস্থাপনা করতে পারেন।
- Optional ব্যবহার করলে, null চেক করার জন্য বারবার কোড লিখতে হয় না। আপনি সরাসরি
Optional ক্লাসটি Java-তে null এর সমস্যা মোকাবেলা করার জন্য একটি শক্তিশালী সরঞ্জাম। এটি null pointer exception প্রতিরোধ করে এবং কোডকে আরও পরিষ্কার, কার্যকরী ও নিরাপদ করে তোলে। Java 8-এ Optional ব্যবহার null safety নিশ্চিত করতে এবং কোডে functional programming প্যাটার্ন প্রয়োগ করতে সহায়ক।
Read more