কন্ডিশনাল বা শর্তসমূহ (Conditionals)
আপনার আগে থেকেই চেনা সেই সমস্ত ট্রাফিক লাইটগুলো (Traffic Lights)
সি++ (C++)-এ কন্ডিশনালগুলো (Conditionals) ঠিক ট্রাফিক লাইটগুলোরই (traffic lights) মতো কাজ করে — এগুলো মূলত কোডটি কীভাবে রান (execution) হবে, তা নিয়ন্ত্রণ করে। সবুজের (Green) অর্থ হলো যাও (go), লালের (red) অর্থ হলো থামো (stop), হলুদের (yellow) অর্থ হলো... এটি আসলে পরিস্থিতির ওপর নির্ভর করে (depends)। যদি আপনি সি-এর (C) কন্ডিশনালগুলোর কথা আগে থেকেই জেনে থাকেন, তবে ধরে নিন আপনি এখানকার কোডগুলোরও ৯০% (90%) ইতোমধ্যেই জানেন। সি++ মূলত এর if, else, switch, এবং টার্নারি অপারেটরটিকে (ternary operator) একেবারে হুবহু সি-এর মতোই (exactly as they are) রেখেছে।
তবে সি++ (C++) শুধু এই উত্তরাধিকারসূত্রে পাওয়া (inheriting) বৈশিষ্ট্যগুলোতেই সীমাবদ্ধ থাকেনি। এটি এর সাথে সি++১৭-এর (C++17) ইফ-উইথ-ইনিশিয়ালাইজার (if-with-initializer)-টিকেও যুক্ত করেছে — যা ছোট হলেও অনেক শক্তিশালী একটি আপগ্রেড (upgrade), যা আপনার কোডকে আরও বেশি ক্লিনার বা পরিপাটি (cleaner) রাখতে সাহায্য করে। চলুন, এই সবকিছু নিয়ে বিস্তারিতভাবে জেনে নেওয়া যাক।
ক্লাসিক if / else — হুবহু সি-এর (C) মতোই
সুইচ স্টেটমেন্টটি (The switch Statement)
সুইচ (Switch) হলো অনেকটাই ভেন্ডিং মেশিনের (vending machine) মতো — যেখানে আপনি কোনো মান বা ভ্যালু দিলেন (insert), আর এটি সরাসরি তার সাথে ম্যাচ করা (matching) নির্দিষ্ট কেসটিতে (case) চলে গেল। যখন আপনি একটি একক ভ্যারিয়েবলের (single variable) সাথে আলাদা আলাদা অনেকগুলো মানের (discrete values) তুলনা (comparing) করেন, তখন এটি মূলত লম্বা অনেকগুলো ইফ-এলসের চেইনের (if-else chain) তুলনায় অনেক দ্রুত (faster) এবং পরিপাটি বা ক্লিনার (cleaner) উপায় হিসেবে কাজ করে।
এর সাধারণ নিয়মগুলো (rules) মূলত সি-এর (C) মতোই: কখনোই এর break-কে ভুলে যাবেন না (don't forget), এবং এর সাথে সর্বদা একটি default কেস (case) যুক্ত করুন।
সুইচ স্টেটমেন্ট বা switch Statement
switch মূলত এখনো শুধুমাত্র ইনটিগ্রাল টাইপগুলোর (integral types) — যেমন int, char, enum এবং এই সমজাতীয় জিনিসগুলোর সাথেই কাজ করে। আপনি কখনোই স্ট্রিংয়ের (strings) ক্ষেত্রে সুইচ (switch) ব্যবহার করতে পারবেন না! স্ট্রিং ম্যাচিংয়ের (string matching) জন্য হয় ইফ-এলস চেইন (if-else chains) ব্যবহার করুন অথবা একটি std::map ব্যবহার করুন যা বিভিন্ন স্ট্রিংকে তার নির্দিষ্ট কাজের (actions) সাথে ম্যাপ (maps) করে দেয়।ম্যাপের সাহায্যে স্ট্রিং ম্যাচিং (String Matching with map) — সুইচের বিকল্প (The switch Alternative)
যেহেতু সুইচ (switch) কখনোই স্ট্রিংয়ের (strings) সাথে কাজ করে না, তাই এক্ষেত্রে এর বাজে ও লম্বা ইফ-এলস চেইনগুলোকে (if-else chains) এড়িয়ে যাওয়ার জন্য std::map-এর সাহায্যে নিচে একটি খুব সুন্দর ও ক্লিন প্যাটার্ন (clean pattern) তৈরি করে দেওয়া হলো:
ম্যাপ (Map) ব্যবহার করে একটি স্ট্রিং "সুইচ (switch)"
টার্নারি অপারেটর (The Ternary Operator) — এক-লাইনের সিদ্ধান্ত (One-Line Decisions)
টার্নারি অপারেটর (ternary operator) condition ? a : b হলো খুব সাধারণ বা সিম্পল কিছু পছন্দের (simple choices) জন্য তৈরি করা একটি সংক্ষিপ্ত বা কম্প্যাক্ট (compact) ইফ-এলস (if-else)। এটি মূলত সরাসরি মান অ্যাসাইন (assignments) করার জন্য কিংবা খুব ছোট ইনলাইন এক্সপ্রেশনের (inline expressions) জন্য অত্যন্ত দুর্দান্ত (perfect) — কিন্তু এদেরকে কখনোই একসাথে নেস্ট (nest) বা যুক্ত করতে যাবেন না, অন্যথায় আপনার কোডটি এমন এক ধরনের পাজল বা ধাঁধায় (puzzle) পরিণত হতে পারে, যা আর কখনোই পড়া যাবে না (unreadable)।
টার্নারি অপারেটর বা Ternary Operator
সি++১৭ (C++17): ইনিশিয়ালাইজারের সাহায্যে if (if with Initializer)
এটি মূলত জীবনযাত্রার মান উন্নয়নের জন্য (quality-of-life upgrade) সি++ (C++) ডেভেলপারদের (devs) মুখে হাসি ফোটানোর জন্য তৈরি করা হয়েছে। সি++১৭-এর (C++17) আগে, আপনার যদি কোনো ফাংশন (function) থেকে কোনো ভ্যালু চেক বা যাচাই (check) করার প্রয়োজন পড়ত, তবে আপনাকে এর জন্য এমন একটি ভ্যারিয়েবল (variable) তৈরি করতে হতো যা কিনা এর চারপাশের স্কোপগুলোতেও (scope) ছড়িয়ে (leaks) পড়ত। কিন্তু এখন আপনি চাইলেই একটি মাত্র স্টেটমেন্টেই সেটিকে ডিক্লেয়ার বা ঘোষণা করতে এবং টেস্ট (declare and test) করে নিতে পারেন, এবং এখানকার ওই ভ্যারিয়েবলটি শুধুমাত্র ওই ইফ ব্লকের (if block) ভেতরেই সীমাবদ্ধ বা সীমিত (confined) থাকে।
এটিকে আপনি মূলত হাতের এক জোড়া গ্লাভস (gloves) পরা, সেটি দিয়ে কাজ করা (doing a job), এবং কাজ শেষে স্বয়ংক্রিয়ভাবে গ্লাভসটিকে খুলে (automatically taking them off) নেওয়ার মতো একটি জিনিস হিসেবে ভাবতে পারেন — যেখানে কোনো প্রকার জঞ্জাল বা নোংরা (no mess) অবশিষ্ট পড়ে থাকে সাসপেন্স।