Safe Navigation Operator ( ?. ) এর ব্যবহার

Null Handling এবং Safe Navigation Operator - স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (Spring Expression Language) - Java Technologies

269

SpEL কী?

SpEL (Spring Expression Language) হল Spring Framework এর একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Spring Beans, প্রপার্টি, মেথড, কন্ডিশনাল লজিক, এবং আরও অনেক কিছু এক্সপ্রেস করতে ব্যবহৃত হয়। SpEL দিয়ে বিভিন্ন ধরনের ডাইনামিক এক্সপ্রেশন তৈরি করা যায়।

Safe Navigation Operator (?.) কী?

Safe Navigation Operator (?.) হল SpEL এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা null-safe এক্সপ্রেশনকে অনুমোদন করে। এটি null pointer exception (NPE) থেকে রক্ষা করতে ব্যবহৃত হয়। যখন আপনি কোনো অবজেক্টের প্রপার্টি বা মেথড কল করতে চান, কিন্তু সেই অবজেক্টটি null হতে পারে, তখন আপনি এই অপারেটর ব্যবহার করতে পারেন।

Safe Navigation Operator ব্যবহার করার মাধ্যমে, যদি অবজেক্টটি null হয়, তাহলে কোনো এক্সসেপশন ছাড়াই SpEL একটি null রিটার্ন করবে, যা আপনার অ্যাপ্লিকেশনকে ক্র্যাশ হতে রোধ করবে।

1. Safe Navigation Operator Syntax

SpEL এ Safe Navigation Operator এর সিনট্যাক্স:

#{object?.property}

এখানে, object হলো Spring Bean বা Java অবজেক্ট এবং property হলো সেই অবজেক্টের প্রপার্টি বা মেথড।


Safe Navigation Operator এর ব্যবহার

2. Safe Navigation Operator Example

ধরা যাক, আমাদের একটি Person ক্লাস আছে যার address নামক একটি প্রপার্টি রয়েছে। address আবার একটি Address ক্লাসের অবজেক্ট। এখন, যদি Person অবজেক্টটির address প্রপার্টি null থাকে, তবে সরাসরি address.city অ্যাক্সেস করার সময় NullPointerException হতে পারে। তবে Safe Navigation Operator ব্যবহার করে আমরা এই সমস্যা এড়াতে পারি।

Person ক্লাস:

package com.example.model;

public class Person {
    private String name;
    private Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public Address getAddress() {
        return address;
    }
}

Address ক্লাস:

package com.example.model;

public class Address {
    private String city;

    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}

3. XML কনফিগারেশন উদাহরণ

এখন, আমরা SpEL ব্যবহার করে Person অবজেক্ট থেকে address.city অ্যাক্সেস করতে চাই। যদি address null থাকে, তাহলে SpEL কেবল null রিটার্ন করবে এবং কোনো এক্সসেপশন ছাড়াই অ্যাপ্লিকেশন চলতে থাকবে।

XML কনফিগারেশন:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="address" class="com.example.model.Address">
        <constructor-arg value="Dhaka"/>
    </bean>

    <bean id="person" class="com.example.model.Person">
        <constructor-arg value="John Doe"/>
        <constructor-arg ref="address"/>
    </bean>

    <bean id="city" class="java.lang.String">
        <constructor-arg value="#{person.address?.city}"/>
    </bean>

</beans>

এখানে, SpEL #{person.address?.city} ব্যবহার করেছে, যা address null না হলে city রিটার্ন করবে, কিন্তু address যদি null থাকে, তাহলে null রিটার্ন করবে, এবং কোনো এক্সসেপশন ছাড়াই চালিয়ে যাবে।

4. Safe Navigation Operator with Null Example

এখন, যদি Person অবজেক্টে address null থাকে, তখন address.city অ্যাক্সেস করলে NullPointerException হবে না, বরং SpEL কেবল null রিটার্ন করবে।

Updated XML কনফিগারেশন:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person" class="com.example.model.Person">
        <constructor-arg value="Jane Doe"/>
        <constructor-arg />
    </bean>

    <bean id="city" class="java.lang.String">
        <constructor-arg value="#{person.address?.city}"/>
    </bean>

</beans>

এখানে, person.address null থাকা সত্ত্বেও SpEL কোন সমস্যা ছাড়াই null রিটার্ন করবে। কোনো NullPointerException ছাড়া অ্যাপ্লিকেশন চলতে থাকবে।


5. Java Configuration Example

Java কনফিগারেশন ব্যবহার করে একই কার্যক্রম:

package com.example.config;

import com.example.model.Person;
import com.example.model.Address;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public Address address() {
        return new Address("Dhaka");
    }

    @Bean
    public Person person() {
        return new Person("John Doe", address());
    }

    @Bean
    public String city() {
        return person().getAddress() != null ? person().getAddress().getCity() : null;
    }
}

এখানে, city() মেথড null চেক করার মাধ্যমে নিশ্চিত করছে যে address null থাকলে city মেথড কোনো সমস্যা ছাড়া কাজ করবে।


Safe Navigation Operator (?.) এর সুবিধা

  • Null Safety: SpEL এর Safe Navigation Operator (?.) null pointer exception থেকে রক্ষা করে।
  • ডাইনামিক অ্যাক্সেস: কোনো অবজেক্টের প্রপার্টি বা মেথড যেকোনো সময় ডাইনামিকভাবে এক্সপ্রেস করা যায়।
  • বিস্মৃতি বা এক্সসেপশন এড়ানো: null অ্যাক্সেসের কারণে অ্যাপ্লিকেশন ক্র্যাশ হবার আশঙ্কা কমে যায়।

সারাংশ

Safe Navigation Operator (?.) SpEL এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা null pointer exception (NPE) থেকে রক্ষা করে। SpEL এর মাধ্যমে, আপনি যখন কোনো অবজেক্টের প্রপার্টি বা মেথড অ্যাক্সেস করতে চান এবং সেই অবজেক্টটি null হতে পারে, তখন আপনি ?. অপারেটর ব্যবহার করে সেই অ্যাক্সেসটি নিরাপদভাবে করতে পারেন। এর মাধ্যমে null check করতে পারার সুবিধা পাওয়া যায় এবং কোনো এক্সসেপশন ছাড়া অ্যাপ্লিকেশন চলতে থাকে।


Content added By
Promotion

Are you sure to start over?

Loading...