Switch টিপে case জিতো
যদি অনেকগুলা else-if লিখতে হয় এবং সবগুলা শর্তের জন্য সমান সমান হলে কিছু করতে হয়, তাহলে অনেক অনেক else-if লেখা বিরক্তিকর এবং স্লো হতে পারে। যেমন ধর, আমাদের একটা গ্রুপ আছে, সেখানে কার কী পদবি বা ক্ষমতা আছে, সেটার ওপরে নির্ভর করে বিভিন্ন জিনিস করতে পারবে। সেজন্য চাইলে আমরা অনেক else-if লিখতেই পারি নিচের মতো করে—
const role = "moderator";
if (role === "admin") {
console.log("Full control.");
} else if (role === "moderator") {
console.log("Manage posts.");
} else if (role === "member") {
console.log("Post and comment.");
} else if (role === "guest") {
console.log("View only.");
} else {
console.log("Invalid role.");
}
Output: Manage posts.ওপরের if-else দিয়ে কাজ ঠিকই হবে। তবে যদি শর্ত অনেক বেশি হয়ে গেলে কোড পড়তে সমস্যা হয়। একই ভেরিয়েবল বারবার চেক করতে হয়। প্রত্যেক লাইনে role === লিখতে হয়। তুলনা করতে হয়। কোড হালকা একটু স্লো হয়ে যায়।
দাও সুইচ টিপে
সুইচের মেইন আইডিয়া হচ্ছে, কোনো একটা জিনিসের বিভিন্ন মানের জন্য বিভিন্ন কাজ করবে। যে মান আসবে, সেটার ওপরে নির্ভর করে কোন case ওপেন করবে, সেটা ঠিক করবে। সে জন্য switch লেখার পর ব্র্যাকেটের ভিতরে একটা ভেরিয়েবল বা একটা সিম্পল কোড এক্সপ্রেশন লিখবি। মূলত যে জিনিসটার মানের ওপরে নির্ভর করবে, সেটা লিখবি। তারপর দুইটা সেকেন্ড ব্র্যাকেট দিবি।
switch (expression) {
}এই সেকেন্ড ব্র্যাকেটের ভিতরে বিভিন্ন মানের জন্য আলাদা আলাদা কেইস লিখবি।
কেইস লেখার জন্য প্রথমে case লিখবি তারপর একটা মান লিখবি। এরপর একটা কোলন চিহ্ন(:) দিবি নিচের মতো করে। এরপর এই কেইস বা এই মানের জন্য এক বা একাধিক লাইন কোড লিখবি। আর কেইসের সবশেষ লাইন হবে break, যাতে কেইস শেষ হলে পুরা সুইচ থেকে কোড বের হয়ে যায়।
switch (expression) {
case value1:
// code block
break;
}এই রকমভাবে যতগুলা দরকার কেইস লিখবি। আর সবার শেষে থাকবে default কেইস। আর ডিফল্ট কেইস লেখার জন্য জাস্ট default লিখলেই হবে। কোনো মান বা case লেখা লাগবে না। আর এই default-এর কাহিনি হচ্ছে ওপরের কোনো কেইস যদি ম্যাচ না করে, তাহলে ডিফল্টের পরের কোড ব্লক আউটপুট দিবে। পুরা switch-এর স্ট্রাকচার দেখতে নিচের মতো হবে।
switch (expression) {
case value1:
// code block
break;
case value2:
// code block
break;
default:
// default block
}এইবার একটা উদাহরণ দেখে ফেল। যেখানে একটা গ্রুপের বিভিন্ন রোল বা পদবির মানুষ আছে। কেউ হয়তো মডারেটর, কেউ অ্যাডমিন, কেউ গেস্ট ইউজার আর কেউ নরমাল ইউজার। আর কে কোন ধরনের ইউজার, সেটার ওপর নির্ভর করবে, সে কী ধরনের কাজ করতে পারবে। এই কোড যদি একটা switch দিয়ে লিখে ফেলি, তাহলে কোড দেখতে নিচের মতো হবে—
const role = "moderator";
switch (role) {
case "admin":
console.log("Full control.");
break;
case "moderator":
console.log("Manage posts.");
break;
case "member":
console.log("Post and comment.");
break;
case "guest":
console.log("View only.");
break;
default:
console.log("Invalid role.");
}Practice:
- একটা mobile নামে ভেরিয়েবল থাকবে। সেখানে brand-এর নাম থাকবে। ব্র্যান্ডের ওপর নির্ভর করে switch দিয়ে ডিফারেন্ট case-এ কনসোল লগ করবি কোন দেশ থেকে সেই ব্র্যান্ড এসেছে। ব্র্যান্ড Apple হলে USA, Samsung হলে Korea, Xiaomi হলে China, আর অন্য কিছু হলে Unknown Source লিখবি।
- browser নামে একটা ভেরিয়েবল থাকবে। সেটার মান Chrome, Brave, Safari বা অন্য কিছু হতে পারে। কনসোল লগ করবে "Best for developers", যদি Chrome হয়, "Privacy focused", যদি Brave হয়, "Apple users' choice", যদি Safari হয়। অন্য কিছু হলে দেখাবে "Unsupported browser"। এইটা কিন্তু প্রথমে if-else দিয়ে করবি। তারপর switch দিয়ে করবি।
- এইবার paymentMethod নামে ভেরিয়েবল থাকবে। সেটার মান cash, credit, debit বা অন্য কিছু হতে পারে। paymentMethod অনুযায়ী কনসোল লগ করবি। cash হলে দেখাবি "Pay with cash", credit হলে দেখাবি "Pay with credit card", debit হলে দেখাবি "Pay with debit card", অন্য কিছু হলে দেখাবি "Invalid payment method"। এইটা switch দিয়ে করবি।
- একটা membership নামে ভেরিয়েবল থাকবে। সেখানে free, silver, gold বা platinum-এর মান থাকবে। membership অনুযায়ী দেখাবি ইউজারের পারমিশন। যেমন, free হলে "Access limited content", silver হলে "Access most content", gold হলে "Access premium content", platinum হলে "Full access"। এইটা শুধু if-else দিয়ে করবি।
- অনলাইনে কোন কিছু অর্ডার দিলে orderStatus থাকে। তাই এই orderStatus নামে ভেরিয়েবল থাকবে। সেটা pending, shipped, delivered বা cancelled হতে পারে। status অনুযায়ী কনসোল লগ করবি। যেমন, pending হলে "Your order is being processed", shipped হলে "Your order is on the way", delivered হলে "Your order has been delivered", cancelled হলে "Your order was cancelled".
- একটা grade নামে ভেরিয়েবল থাকবে। সেটার মান A, B, C, D বা F হতে পারে। গ্রেড অনুযায়ী দেখাবি ইউজারের ফলাফল। A হলে "Excellent", B হলে "Good", C হলে "Average", D হলে "Poor", F হলে "Fail"।