Ternary এবং Elvis অপারেটর

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

371

Spring Expression Language (SpEL) এর মধ্যে বিভিন্ন ধরনের অপারেটর রয়েছে, যার মধ্যে Ternary এবং Elvis অপারেটর দুটি গুরুত্বপূর্ণ। এগুলি শর্তানুযায়ী এক্সপ্রেশনগুলির ফলাফল নির্ধারণ করতে ব্যবহৃত হয়, এবং স্প্রিং কনফিগারেশন এবং অন্যান্য প্রয়োজনে ব্যবহার করা যায়।


Ternary অপারেটর

Ternary অপারেটর বা Conditional Operator হল একটি শর্তাধীন অপারেটর যা একটি শর্ত পরীক্ষা করে এবং সেই শর্তের ভিত্তিতে দুটি ভিন্ন মান প্রদান করে। এটি সাধারণত ৩টি অংশে বিভক্ত হয়:

condition ? value_if_true : value_if_false

এখানে:

  • condition: একটি শর্ত যা true বা false হতে পারে।
  • value_if_true: যদি শর্তটি সত্য হয়, তবে এটি রিটার্ন করবে।
  • value_if_false: যদি শর্তটি মিথ্যা হয়, তবে এটি রিটার্ন করবে।

উদাহরণ:

String expression = "#{(5 > 3) ? 'Greater' : 'Smaller'}";
String result = parser.parseExpression(expression).getValue(String.class);
System.out.println(result);  // Output: Greater

এখানে, 5 > 3 শর্তটি সত্য হওয়ায় Ternary অপারেটর "Greater" রিটার্ন করবে।

আরও একটি উদাহরণ:

String expression = "#{(10 % 2 == 0) ? 'Even' : 'Odd'}";
String result = parser.parseExpression(expression).getValue(String.class);
System.out.println(result);  // Output: Even

এখানে, 10 % 2 == 0 শর্তটি সত্য হওয়ায় "Even" রিটার্ন করবে।


Elvis অপারেটর

Elvis অপারেটর হল Ternary অপারেটরের একটি বিশেষ সংস্করণ, যা মূলত null চেক করার জন্য ব্যবহৃত হয়। এটি একটি মানের উপস্থিতি যাচাই করে, এবং যদি মানটি null হয়, তবে একটি ডিফল্ট ভ্যালু প্রদান করে।

Elvis অপারেটরের সেন্ট্যাক্স:

value ?: default_value

এখানে:

  • value: যদি এটি null না হয়, তবে তা রিটার্ন হবে।
  • default_value: যদি value null হয়, তবে এটি রিটার্ন হবে।

উদাহরণ:

String expression = "#{user.name ?: 'Default Name'}";
String result = parser.parseExpression(expression).getValue(String.class);
System.out.println(result);  // Output: Default Name (if user.name is null)

এখানে, যদি user.name null হয়, তবে "Default Name" রিটার্ন হবে।

আরও একটি উদাহরণ:

String expression = "#{user.age ?: 18}";
int result = parser.parseExpression(expression).getValue(Integer.class);
System.out.println(result);  // Output: 18 (if user.age is null)

এখানে, যদি user.age null হয়, তবে 18 রিটার্ন হবে।


Ternary এবং Elvis অপারেটর এর মধ্যে পার্থক্য

  • Ternary অপারেটর সাধারণ শর্তের ভিত্তিতে দুটি মানের মধ্যে নির্বাচন করতে ব্যবহৃত হয়।
  • Elvis অপারেটর শুধুমাত্র null চেক করে এবং যদি মানটি null হয়, তবে একটি ডিফল্ট মান প্রদান করে।

সার্বিক উপসংহার

Ternary এবং Elvis অপারেটরগুলি SpEL-এ শর্তানুযায়ী এক্সপ্রেশন বা মান নির্বাচন করতে সহায়ক। Ternary অপারেটরটি সাধারণ শর্ত নির্ধারণের জন্য ব্যবহার করা হয়, যেখানে Elvis অপারেটরটি মূলত null চেক এবং ডিফল্ট মান প্রদান করার জন্য ব্যবহৃত হয়। এই অপারেটরগুলি SpEL এর শক্তি এবং নমনীয়তা বৃদ্ধি করে এবং Spring কনফিগারেশনে এবং ডাইনামিক এক্সপ্রেশনগুলিতে সহজ শর্তাবলী তৈরি করতে সহায়তা করে।


Content added By

Ternary অপারেটর কী?

Ternary অপারেটর (বা Conditional অপারেটর) একটি শর্তযুক্ত এক্সপ্রেশন যা দুটি ভিন্ন মানের মধ্যে একটি নির্বাচন করতে ব্যবহৃত হয়। এটি একটি if-else স্টেটমেন্টের সংক্ষিপ্ত রূপ এবং সাধারণত তিনটি অংশ নিয়ে গঠিত: একটি শর্ত, সত্য হলে একটি মান, এবং মিথ্যা হলে অন্য একটি মান।

স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) তে Ternary অপারেটর একটি শর্তের উপর ভিত্তি করে দুটি মানের মধ্যে একটি নির্বাচন করে এবং এটি ? : চিহ্নের মাধ্যমে প্রকাশ করা হয়।

Ternary অপারেটর এর গঠন

condition ? value_if_true : value_if_false
  • condition: এটি একটি বুলিয়ান এক্সপ্রেশন (যেমন true বা false) যা যাচাই করা হয়।
  • value_if_true: যদি শর্তটি সত্য (true) হয়, তাহলে এই মানটি রিটার্ন করা হয়।
  • value_if_false: যদি শর্তটি মিথ্যা (false) হয়, তাহলে এই মানটি রিটার্ন করা হয়।

SpEL তে Ternary অপারেটর কিভাবে কাজ করে?

SpEL তে Ternary অপারেটর ব্যবহার করে আপনি এক্সপ্রেশনগুলির উপর শর্ত পরীক্ষা করতে পারেন এবং সেগুলির ভিত্তিতে মান নির্বাচন করতে পারেন। এটি খুবই সহজ এবং কার্যকরীভাবে if-else লজিক তৈরি করতে সহায়ক।

উদাহরণ ১: সাধারণ Ternary অপারেটর

#{10 > 5 ? 'Greater than 5' : 'Less than or equal to 5'}

এখানে, 10 > 5 শর্তটি যাচাই করা হচ্ছে। শর্তটি সত্য (true), তাই 'Greater than 5' রিটার্ন হবে।

ব্যাখ্যা:

  • condition: 10 > 5
  • value_if_true: 'Greater than 5'
  • value_if_false: 'Less than or equal to 5'

উদাহরণ ২: স্প্রিং কনফিগারেশন ফাইলে SpEL তে Ternary অপারেটর

স্প্রিং কনফিগারেশন ফাইলে SpEL ব্যবহার করে Ternary অপারেটর ব্যবহার করা যেতে পারে।

<bean id="greetingService" class="com.example.GreetingService">
    <property name="message" value="#{systemProperties['os.name'].contains('Windows') ? 'Hello Windows User!' : 'Hello Unix User!'}"/>
</bean>

ব্যাখ্যা:

  • condition: systemProperties['os.name'].contains('Windows')
  • value_if_true: 'Hello Windows User!'
  • value_if_false: 'Hello Unix User!'

এখানে, os.name সিস্টেম প্রপার্টি চেক করা হচ্ছে। যদি এটি 'Windows' ধারণ করে, তাহলে 'Hello Windows User!' রিটার্ন হবে, অন্যথায় 'Hello Unix User!' রিটার্ন হবে।


উদাহরণ ৩: ব্যবহারকারী ইনপুটের উপর ভিত্তি করে Ternary অপারেটর

#{user.age >= 18 ? 'Adult' : 'Minor'}

এখানে, user.age >= 18 শর্তটি যাচাই করা হচ্ছে। যদি ব্যবহারকারীর বয়স ১৮ বা তার বেশি হয়, তাহলে 'Adult' রিটার্ন হবে, অন্যথায় 'Minor' রিটার্ন হবে।

ব্যাখ্যা:

  • condition: user.age >= 18
  • value_if_true: 'Adult'
  • value_if_false: 'Minor'

SpEL তে Ternary অপারেটরের কিছু গুরুত্বপূর্ণ ব্যবহার

  1. সংখ্যার উপর ভিত্তি করে শর্ত:

    #{age > 18 ? 'Eligible' : 'Not Eligible'}
    

    এখানে, age > 18 শর্তটি যাচাই করা হচ্ছে এবং শর্তের ভিত্তিতে 'Eligible' অথবা 'Not Eligible' রিটার্ন হবে।

  2. বুলিয়ান শর্ত:

    #{true ? 'Yes' : 'No'}
    

    এটি 'Yes' রিটার্ন করবে, কারণ শর্তটি সত্য।

  3. স্ট্রিং ম্যানিপুলেশন:

    #{'apple'.equals('orange') ? 'Matched' : 'Not Matched'}
    

    এখানে, 'apple' এবং 'orange' স্ট্রিং তুলনা করা হচ্ছে। শর্তটি মিথ্যা হওয়ায় 'Not Matched' রিটার্ন হবে।


SpEL তে Ternary অপারেটর ব্যবহার করার সুবিধা

  1. সংক্ষিপ্ততা: SpEL এর Ternary অপারেটর কোডকে সংক্ষিপ্ত এবং সহজ করে তোলে। এটি if-else স্টেটমেন্টের একটি সংক্ষিপ্ত রূপ।
  2. ডাইনামিক কনফিগারেশন: SpEL এর Ternary অপারেটর ব্যবহার করে স্প্রিং কনফিগারেশন ফাইলে শর্তানুযায়ী বিভিন্ন মান নির্ধারণ করা যায়।
  3. পারফরম্যান্স: এক্সপ্রেশন দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করা সম্ভব, যা কোডে লজিক্যাল অপারেশন সহজ করে।

সারাংশ

Ternary অপারেটর SpEL এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা শর্তের উপর ভিত্তি করে দুটি ভিন্ন মানের মধ্যে একটি নির্বাচন করতে ব্যবহৃত হয়। এটি condition ? value_if_true : value_if_false ফরম্যাটে কাজ করে এবং স্প্রিং কনফিগারেশন ফাইল বা কোডে শর্তানুযায়ী ডাইনামিকভাবে মান নির্ধারণ করতে সহায়ক। SpEL তে Ternary অপারেটর ব্যবহারের মাধ্যমে কোড আরও পরিষ্কার, সংক্ষিপ্ত এবং কার্যকরী করা যায়।

Content added By

Elvis অপারেটর কি?

Elvis অপারেটর হলো SpEL (Spring Expression Language) এর একটি বিশেষ অপারেটর, যা মূলত ?: চিহ্ন দ্বারা প্রতিনিধিত্ব করা হয়। এটি কন্ডিশনাল বা নাল চেকিং অপারেটর হিসেবে কাজ করে। Elvis অপারেটরটি একটি বিকল্প মান প্রদান করার জন্য ব্যবহৃত হয়, যখন কোনো এক্সপ্রেশন বা ভ্যালু নাল (null) হয়। এটি null-safe অপারেটর হিসেবেও পরিচিত, কারণ এটি null ভ্যালু চেক করতে সাহায্য করে এবং null থাকার পরিস্থিতিতে ডিফল্ট মান প্রদান করতে পারে।

Elvis অপারেটর if-else বা ternary অপারেটরের মতো কাজ করে, তবে এটি কম্প্যাক্ট এবং সহজভাবে একটি মান প্রদান করে যখন কোন এক্সপ্রেশন null হয়।


Elvis অপারেটরের গঠন

SpEL-এ Elvis অপারেটরের সঠিক গঠন হল:

expression ?: default_value
  • expression: এখানে যেকোন এক্সপ্রেশন থাকবে, যেমন একটি ভেরিয়েবল বা মেথড কল।
  • default_value: যদি প্রথম এক্সপ্রেশন null হয়, তাহলে এটি ডিফল্ট মান হিসেবে ব্যবহার হবে।

Elvis অপারেটরের উদাহরণ

উদাহরণ ১: Elvis অপারেটরের সাধারণ ব্যবহার

ধরা যাক, আমাদের কাছে একটি name ভেরিয়েবল আছে, যার মান হয়তো null হতে পারে। আমরা Elvis অপারেটর ব্যবহার করে সহজেই একটি ডিফল্ট মান প্রদান করতে পারি।

উদাহরণ:

ExpressionParser parser = new SpelExpressionParser();

// name ভেরিয়েবল
String name = null;

// Elvis অপারেটর ব্যবহার
String result = parser.parseExpression("name ?: 'Default Name'").getValue(String.class);
System.out.println(result);  // Output: Default Name

এখানে, name যদি null হয়, তাহলে 'Default Name' ডিফল্ট মান হিসেবে সেট হবে।


উদাহরণ ২: Elvis অপারেটর সহ Spring Bean

SpEL ব্যবহার করে Spring Beans-এও Elvis অপারেটর প্রয়োগ করা যায়। যেমন, যদি কোনো Bean এর প্রপার্টি null হয়, তাহলে আমরা একটি ডিফল্ট মান প্রদান করতে পারি।

Employee.java (Spring Bean)

public class Employee {
    private String name;

    // Getter and Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Spring Bean Configuration (XML)

<bean id="employee" class="com.example.Employee">
    <property name="name" value="null"/>
</bean>

Elvis Operator Example in SpEL

ExpressionParser parser = new SpelExpressionParser();

// Spring Bean Context
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Employee employee = (Employee) context.getBean("employee");

// Elvis অপারেটর ব্যবহার
String employeeName = parser.parseExpression("employee.name ?: 'Anonymous'").getValue(context, String.class);
System.out.println(employeeName);  // Output: Anonymous

এখানে, employee.name যদি null হয়, তাহলে 'Anonymous' ডিফল্ট মান হিসেবে ব্যবহার হবে।


উদাহরণ ৩: Elvis অপারেটর ব্যবহার করে ফাংশনাল চেক

Elvis অপারেটর ব্যবহার করে কোনো মেথড কলের ফলাফলও চেক করা যায় এবং null না থাকলে সেটি ব্যবহার করা হয়, আর null থাকলে ডিফল্ট মান দেয়া হয়।

public class Employee {
    private String name;

    public String getName() {
        return name;
    }

    public String getDisplayName() {
        return name != null ? name : "No Name Available";
    }
}

ExpressionParser parser = new SpelExpressionParser();
Employee employee = new Employee();

// Elvis অপারেটর ব্যবহার
String displayName = parser.parseExpression("employee.getDisplayName() ?: 'Unknown'").getValue(employee, String.class);
System.out.println(displayName);  // Output: Unknown (because name is null)

এখানে, getDisplayName() মেথডের ফলাফল null হলে 'Unknown' ডিফল্ট মান হিসেবে প্রদর্শিত হবে।


Elvis অপারেটরের সুবিধা

  1. কমপ্যাক্ট এবং সহজ: Elvis অপারেটর খুবই সংক্ষিপ্ত এবং সহজ, যা অনেক বড় if-else বা ternary অপারেটর কোটকে প্রতিস্থাপন করতে পারে।
  2. null চেকিং: এটি null চেক করতে সহায়ক, বিশেষত যখন ডেটার মান নিশ্চিত করা যায় না বা তা null হতে পারে।
  3. ডিফল্ট মান প্রদান: null মান থাকলে ডিফল্ট মান সহজে নির্ধারণ করতে সাহায্য করে, যা কোডের পরিপূর্ণতা ও কার্যকারিতা বাড়ায়।
  4. নির্ভুলতা: null প্যারামিটার বা মান থাকলে কোডের মধ্যে error বা null pointer exception তৈরির সম্ভাবনা কমায়।

সারাংশ

SpEL এর Elvis অপারেটর ( ?: ) হল একটি খুবই কার্যকরী অপারেটর, যা null চেকিং এবং ডিফল্ট মান প্রদান করার জন্য ব্যবহৃত হয়। এটি কন্ডিশনাল এক্সপ্রেশন লেখার কাজ সহজ করে এবং Spring Beans বা সাধারণ Java কোডে null handling আরও নিরাপদ এবং কার্যকরী করে তোলে।

Content added By

Spring Expression Language (SpEL) অনেক ধরণের এক্সপ্রেশন এবং অপারেটর সাপোর্ট করে, যার মধ্যে Ternary এবং Elvis অপারেটর দুটি বিশেষ ধরনের অপারেটর। এগুলি মূলত শর্তযুক্ত এক্সপ্রেশন ব্যবহারের জন্য ব্যবহৃত হয়, যেগুলি কন্ডিশনাল লজিক সহজভাবে এবং সংক্ষিপ্তভাবে প্রকাশ করতে সাহায্য করে।


১. Ternary অপারেটর

Ternary অপারেটর একটি শর্তপূর্ণ এক্সপ্রেশন, যা if-else শাখার সংক্ষিপ্ত রূপ। এটি তিনটি অংশে বিভক্ত:

  • Condition: শর্ত
  • True Value: শর্তটি যদি সঠিক হয়
  • False Value: শর্তটি যদি ভুল হয়

SpEL-এ Ternary অপারেটর ব্যবহার করতে হয় ? : সিনট্যাক্সের মাধ্যমে। এর মাধ্যমে আপনি একটি শর্ত পরীক্ষা করতে পারেন এবং শর্ত সঠিক হলে একটি মান বা ফলাফল প্রদান করতে পারেন, অন্যথায় অন্য একটি মান প্রদান করতে পারেন।

উদাহরণ: Ternary অপারেটর ব্যবহার

@Component
public class EmployeeService {

    public String getSalaryMessage(int salary) {
        return salary > 50000 ? "High Salary" : "Low Salary";
    }
}

এখানে SpEL-এর মাধ্যমে salary > 50000 শর্তটি পরীক্ষা করা হয়েছে। যদি এটি সত্য হয়, তাহলে "High Salary" রিটার্ন করা হবে, অন্যথায় "Low Salary" রিটার্ন করা হবে।

SpEL এর মাধ্যমে Ternary অপারেটর ব্যবহার (XML কনফিগারেশন)

<bean id="employeeService" class="com.example.EmployeeService"/>

<bean id="salaryMessageBean" class="com.example.SalaryMessage">
    <property name="message" value="#{employeeService.getSalaryMessage(60000)}"/>
</bean>

বর্ণনা:

  • এখানে SpEL ব্যবহার করে employeeService.getSalaryMessage(60000) মেথড কল করা হয়েছে, যা Ternary অপারেটরের মাধ্যমে শর্ত পরীক্ষা করে রিটার্ন ভ্যালু প্রদান করবে।

২. Elvis অপারেটর

Elvis অপারেটর (ওরফে "null-safe" Ternary অপারেটর) SpEL-এ একটি বিশেষ ধরনের অপারেটর যা null ভ্যালু চেক করার জন্য ব্যবহৃত হয়। এটি একটি সংক্ষিপ্ত পদ্ধতিতে null চেক করে এবং যদি মান null হয়, তবে একটি ডিফল্ট মান প্রদান করে।

SpEL-এ Elvis অপারেটর ব্যবহার করা হয় ?: সিনট্যাক্সের মাধ্যমে। এটি মূলত Ternary অপারেটরের মতোই কাজ করে, তবে এখানে শুধুমাত্র null মান চেক করা হয়।

উদাহরণ: Elvis অপারেটর ব্যবহার

@Component
public class EmployeeService {

    public String getEmployeeName(String name) {
        return name != null ? name : "Unknown";
    }
}

এখানে SpEL-এর মাধ্যমে name != null ? name : "Unknown" এই এক্সপ্রেশনটি ব্যবহার করা হয়েছে। যদি name null না হয়, তবে সেই নাম রিটার্ন হবে, অন্যথায় "Unknown" রিটার্ন হবে।

SpEL এর মাধ্যমে Elvis অপারেটর ব্যবহার (XML কনফিগারেশনে)

<bean id="employeeService" class="com.example.EmployeeService"/>

<bean id="employeeNameBean" class="com.example.Employee">
    <property name="employeeName" value="#{employeeService.getEmployeeName(null)}"/>
</bean>

বর্ণনা:

  • এখানে SpEL ব্যবহার করে employeeService.getEmployeeName(null) কল করা হয়েছে। কারণ নাম null, তাই "Unknown" রিটার্ন হবে।

SpEL তে Ternary এবং Elvis অপারেটরের মধ্যে পার্থক্য

বৈশিষ্ট্যTernary অপারেটরElvis অপারেটর
ব্যবহারশর্ত চেক করে দুটি মানের মধ্যে একটি রিটার্ন করতেnull মান চেক করে একটি ডিফল্ট মান রিটার্ন করতে
সিনট্যাক্সcondition ? valueIfTrue : valueIfFalsevalue ?: defaultValue
সর্বোচ্চ সুবিধাযেকোনো শর্তের ভিত্তিতে বিভিন্ন মান রিটার্ন করা যায়শুধু null চেক এবং ডিফল্ট মান প্রদান করা যায়

সারাংশ

SpEL (Spring Expression Language) তে Ternary অপারেটর এবং Elvis অপারেটর দুটি শক্তিশালী টুল, যা ডাইনামিক এক্সপ্রেশন ব্যবহার করতে সাহায্য করে। Ternary অপারেটর শর্তাধীন এক্সপ্রেশন ব্যবহারের জন্য উপযুক্ত, যেখানে আপনি if-else লজিক ব্যবহার করতে পারেন। অপরদিকে, Elvis অপারেটর null চেক করার জন্য একটি সহজ এবং সংক্ষিপ্ত উপায় প্রদান করে, যেখানে আপনি null থাকলে ডিফল্ট মান ব্যবহার করতে পারেন। SpEL-এ এই অপারেটরগুলি অ্যাপ্লিকেশনকে আরও কার্যকরী এবং নমনীয় করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...