প্রতিটি কার্যকর প্রোগ্রাম শেষ পর্যন্ত একটি সিদ্ধান্তের মুখোমুখি হয়। এই বাটনটি কি ফর্মটি সাবমিট করবে নাকি একটি ত্রুটি দেখাবে? এই ব্যবহারকারী কি অ্যাডমিন ড্যাশবোর্ড দেখবে নাকি গেস্ট ভিউ? JavaScript কন্ডিশনাল স্টেটমেন্টের (conditional statements) মাধ্যমে এই প্রশ্নগুলোর উত্তর দেয়। এগুলো আপনার কোডের কন্ট্রোল ভালভ হিসেবে কাজ করে: একটি পথ খুলে দেয়, অন্যটি বন্ধ করে দেয়, এবং এই সবকিছুই নির্ভর করে একটি এক্সপ্রেশন true নাকি false তার ওপর। এগুলো ছাড়া, আপনার স্ক্রিপ্ট ব্যবহারকারীর কোনো প্রতিক্রিয়ার সাহায্য ছাড়াই উপর থেকে নিচে চলতে থাকবে।

সবচেয়ে সহজ শাখা: if

if স্টেটমেন্ট হলো সেই গেট বা প্রবেশপথ যা দিয়ে আপনি সবার আগে পার হন। আপনি বন্ধনী বা প্যারেন্থেসিসের (parentheses) ভেতরে একটি শর্ত (condition) প্রদান করেন। যদি সেই শর্তটি true হয়, তবে নিচের কোড ব্লকটি কার্যকর হয়। আর যদি সেটি false হয়, তবে JavaScript পুরো ব্লকটি এড়িয়ে যায় এবং ফাইলের পরবর্তী অংশে চলে যায়।

সাধারণ বা একবারের যাচাইকরণের জন্য ঠিক এটাই আপনার প্রয়োজন। সার্ভারে কিছু পাঠানোর আগে একটি ফর্ম ফিল্ড যাচাই করার কথা কল্পনা করুন:

const email = document.getElementById("email").value;

if (email === "") {
  alert("Please enter your email.");
}

email না থাকলে সাবমিশন হবে না। লজিকটি অত্যন্ত সহজ এবং স্পষ্ট। যখন শুধুমাত্র একটি বিশেষ ক্ষেত্র থেকে সুরক্ষা প্রয়োজন এবং অন্য কোনো বিকল্প পদক্ষেপের দরকার নেই, তখন if ব্যবহার করুন।

হয় এটি অথবা ওটি: if...else

বেশিরভাগ বাস্তব সিদ্ধান্তই দুই ধরণের হয়। if...else জোড়াটি ঠিক সেটিই সম্পন্ন করে। শর্তটি true হলে একটি ব্লক চলে, আর false হলে অন্যটি চলে। এই দুটি পথ একে অপরের থেকে সম্পূর্ণ আলাদা।

পেজ লোড হওয়ার সময় ডার্ক-মোড চেক করার বিষয়টি কল্পনা করুন:

const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;

if (prefersDark) {
  document.body.classList.add("dark");
} else {
  document.body.classList.add("light");
}

ব্রাউজার কখনোই দুটি ক্লাসই একসাথে যোগ করবে না। এটি একটি পথ বেছে নেবে, সেটি কার্যকর করবে এবং সামনে এগিয়ে যাবে। যখনই আপনার লজিক দুটি সম্ভাব্য ফলাফলের মধ্যে স্পষ্টভাবে বিভক্ত হয়, তখনই এই স্ট্রাকচারটি ব্যবহার করা উচিত।

একাধিক পথ: if...else if...else

সব সমস্যা বাইনারি (binary) বা দ্বিমুখী নয়। মাঝে মাঝে আপনার অনেকগুলো সম্ভাবনার একটি সিঁড়ি প্রয়োজন হয়। if...else if...else চেইন আপনাকে ধারাবাহিকভাবে বেশ কয়েকটি শর্ত পরীক্ষা করতে দেয়। JavaScript উপর থেকে নিচে এগুলো মূল্যায়ন করে এবং যে ব্লকের শর্তটি প্রথম true হয় সেটি কার্যকর করে। একবার মিল পেয়ে গেলে, সিঁড়ির বাকি অংশগুলো আর দেখা হয় না।

একটি ক্লাসিক উদাহরণ হলো একটি সংখ্যাসূচক স্কোরকে লেটার গ্রেডে রূপান্তর করা:

const score = 87;
let grade;

if (score >= 90) {
  grade = "A";
} else if (score >= 80) {
  grade = "B";
} else if (score >= 70) {
  grade = "C";
} else {
  grade = "F";
}

এখানে ক্রম বা অর্ডার অত্যন্ত গুরুত্বপূর্ণ। আপনি যদি score >= 90-এর আগে score >= 70 চেক করেন, তবে প্রায় সব পাস করা গ্রেডই C ক্যাটাগরিতে আটকে যাবে, কারণ প্রথম যে শর্তটি true হবে সেটিই জয়ী হবে। আপনার শর্তগুলোকে সবচেয়ে সুনির্দিষ্ট থেকে সবচেয়ে সাধারণ ক্রমে সাজিয়ে রাখুন এবং কোনো কিছু বাদ পড়ে গেলে তা ধরার জন্য চেইনের শেষে সবসময় একটি else ব্যবহার করুন।

নির্দিষ্ট মানের সাথে মিলানো: switch

যখন আপনি একটি ভ্যারিয়েবলকে পরিচিত ধ্রুবক বা কনস্ট্যান্টের (constants) একটি তালিকার সাথে তুলনা করছেন, তখন একটি দীর্ঘ if...else চেইন কোডকে জটিল করে তোলে। switch স্টেটমেন্ট বিষয়টিকে সহজ করে দেয়। এটি একবার একটি এক্সপ্রেশন মূল্যায়ন করে এবং তারপর স্ট্রিক্ট ইকুয়ালিটি (===) ব্যবহার করে case লেবেলগুলোর সাথে তুলনা করে। যখন অপশনগুলো আলাদা এবং নামযুক্ত হয়, তখন এটি কোড পড়া সহজ করে তোলে।

বর্তমান দিনের ওপর ভিত্তি করে স্টোরের সময় নির্ধারণ করার বিষয়টি বিবেচনা করুন:

const day = new Date().getDay();

switch (day) {
  case 0:
    console.log("Sunday hours: 10am - 4pm");
    break;
  case 6:
    console.log("Saturday hours: 9am - 6pm");
    break;
  default:
    console.log("Weekday hours: 8am - 8pm");
}

break ব্যবহারের ক্ষেত্রে সতর্ক থাকুন। আপনি যদি এটি বাদ দেন, তবে এক্সিকিউশন পরবর্তী case-এ চলে যাবে এবং চলতে থাকবে। এই আচরণটি মাঝে মাঝে দরকারী হলেও, বেশিরভাগ ক্ষেত্রে এটি নিঃশব্দে বাগ (bug) তৈরি করে। সঠিকভাবে ব্যবহার করলে, switch আপনার উদ্দেশ্য এক পলকেই স্পষ্ট করে দেয় এবং সম্পর্কিত শাখাগুলোকে একটি পরিচ্ছন্ন কলামে সাজিয়ে রাখে।

সংক্ষিপ্ত সিদ্ধান্ত: টারনারি অপারেটর

টারনারি অপারেটর—যা ? : হিসেবে লেখা হয়—একটি এক্সপ্রেশন, কোনো স্টেটমেন্ট নয়। এই পার্থক্যটি গুরুত্বপূর্ণ