কম্পিউটার টিউটোরিয়াল

C++-এ টার্নারি অপারেটর (? X : Y)


কন্ডিশনাল অপারেটর (? :) একটি টার্নারি অপারেটর (এটি তিনটি অপারেন্ড নেয়)। কন্ডিশনাল অপারেটর নিচের মত কাজ করে:

  • প্রথম অপারেন্ড ইম্পলসিটলি bool-এ কনভার্ট হয়। এটি ইভ্যালুয়েট হয় এবং সব সাইড ইফেক্ট সম্পূর্ণ হয় পরবর্তীতে যাওয়ার আগে।
  • যদি প্রথম অপারেন্ড true (১) হয়, তবে দ্বিতীয় অপারেন্ড ইভ্যালুয়েট হয়।
  • যদি প্রথম অপারেন্ড false (০) হয়, তবে তৃতীয় অপারেন্ড ইভ্যালুয়েট হয়।
  • কন্ডিশনাল অপারেটরের ফলাফল হলো যেই অপারেন্ডটি ইভ্যালুয়েট হয়েছে তার ফলাফল - দ্বিতীয় অথবা তৃতীয়। শুধু দুটি শেষ অপারেন্ডের একটি কন্ডিশনাল এক্সপ্রেশনে ইভ্যালুয়েট হয়। কন্ডিশনাল অপারেটরের ইভ্যালুয়েশন খুব জটিল। উপরের ধাপগুলো শুধু একটি দ্রুত পরিচিতি। কন্ডিশনাল এক্সপ্রেশনগুলোর রাইট-টু-লেফট অ্যাসোসিয়েটিভিটি রয়েছে। প্রথম অপারেন্ড অবশ্যই ইন্টিগ্রাল বা পয়েন্টার টাইপের হতে হবে।
  • দ্বিতীয় এবং তৃতীয় অপারেন্ডের জন্য নিচের নিয়মগুলো প্রযোজ্য:
    • যদি দুটি অপারেন্ড একই টাইপের হয়, তবে ফলাফলও সেই টাইপের হবে।
    • যদি দুটি অপারেন্ড আর্থমেটিক বা এনুমেরেশন টাইপের হয়, তবে সাধারণ আর্থমেটিক কনভার্সন (স্ট্যান্ডার্ড কনভার্সনে কভার করা আছে) সেগুলোকে একটি কমন টাইপে কনভার্ট করতে পারফর্ম করা হয়।
    • যদি দুটি অপারেন্ড পয়েন্টার টাইপের হয় অথবা একটি পয়েন্টার টাইপ এবং অন্যটি একটি কনস্ট্যান্ট এক্সপ্রেশন যা ০ ইভ্যালুয়েট করে, তবে পয়েন্টার কনভার্সন পারফর্ম করা হয় সেগুলোকে একটি কমন টাইপে কনভার্ট করতে।
    • যদি দুটি অপারেন্ড রেফারেন্স টাইপের হয়, তবে রেফারেন্স কনভার্সন পারফর্ম করা হয় সেগুলোকে একটি কমন টাইপে কনভার্ট করতে।
    • যদি দুটি অপারেন্ড void টাইপের হয়, তবে কমন টাইপ হলো void।
    • যদি দুটি অপারেন্ড একই ইউজার-ডিফাইনড টাইপের হয়, তবে কমন টাইপ হলো সেই টাইপ।
    • যদি অপারেন্ডগুলোর টাইপ ভিন্ন হয় এবং কমপক্ষে একটি ইউজার-ডিফাইনড টাইপ থাকে, তবে ল্যাঙ্গুয়েজ রুলস কমন টাইপ নির্ধারণ করতে ব্যবহৃত হয়। (নিচের সতর্কতা দেখুন।)

উদাহরণ

#include <iostream>
using namespace std;
int main() {
    int i = 1, j = 2;
    cout << (i > j ? i : j) << " is greater." << endl;
}

আউটপুট

এটি নিচের আউটপুট দেবে:

2 is greater.
  1. C++-এ auto কিওয়ার্ড কী করে?

  2. C++-এ টাইপ কোয়ালিফায়ার কী?

  3. C#-এ টার্নারি অপারেটর (Ternary Operator) কী

  4. C#-এ টারনারি অপারেটর/কন্ডিশনাল অপারেটর কী?