Optional এর মাধ্যমে ডেটা ম্যানিপুলেশন

Optional Class (অপশনাল ক্লাস) - জাভা (Java 8) - Computer Programming

353

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 ভ্যালু ফিরে পেতে চান, অর্থাৎ nested Optional গঠন করতে।

উদাহরণ: 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 এর মধ্যে কোনো ভ্যালু থাকে তবে এটি একটি মেসেজ প্রিন্ট করবে।


সারসংক্ষেপ

  • Optional Java 8 এর একটি শক্তিশালী বৈশিষ্ট্য যা null ভ্যালু ব্যবহারের ঝামেলা এড়ানোর জন্য ব্যবহৃত হয়।
  • map() এবং flatMap() ডেটা ট্রান্সফর্ম করতে সাহায্য করে।
  • filter() শর্ত প্রয়োগ করে ডেটা ফিল্টার করে।
  • orElse() এবং orElseGet() ডিফল্ট ভ্যালু প্রদান করে।
  • ifPresent() একটি ভ্যালু উপস্থিত থাকলে কোন অ্যাকশন নিতে সাহায্য করে।

Optional ব্যবহার করে আপনি নিরাপদভাবে এবং কার্যকরভাবে ডেটা ম্যানিপুলেশন করতে পারেন এবং কোডের পঠনযোগ্যতা ও স্থায়িত্ব উন্নত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...