Lesson ৭ মিনিট পড়া

অপারেটর এবং এক্সপ্রেশন (Operators & Expressions)

গণিত এবং যুক্তির সেই সব সুপারপাওয়ার যা দিয়ে আপনার কোড আসলেই কাজ করে

অ্যারিথমেটিক অপারেটরগুলো — গণিতের ক্লাস, তবে মজায় ভরা (Arithmetic Operators — Math Class, But Fun)

আপনি সাধারণ গণিতে যা যা আশা করেন, জাভাস্ক্রিপ্ট তার সবকিছুই করতে পারে, এর সাথে আরও কিছু বাড়তি ট্রিকসও আছে। অপারেটরগুলোকে অ্যাকশন ওয়ার্ড হিসেবে চিন্তা করুন — এরা জাভাস্ক্রিপ্টকে এদের ভ্যালুগুলো দিয়ে কিছু একটা করতে বলে।

  • + — যোগ করা (এছাড়া স্ট্রিং জোড়া লাগাতেও এটি ব্যবহৃত হয়!)
  • - — বিয়োগ করা
  • * — গুণ করা
  • / — ভাগ করা
  • % — মডিউলো (ভাগের পর যে ভাগশেষ থাকে — জোড়/বিজোড় নির্ণয় করার জন্য এটি বেশ কার্যকরী)
  • ** — সূচক বা এক্সপোনেনশিয়েশন (exponentiation বা power)। 2 ** 3 মানে 2×2×2 = 8

এই + অপারেটরটি মাঝে মাঝে ধোঁকা দিতে পারে — যখন আপনি এটিকে কোনো স্ট্রিংয়ের সাথে ব্যবহার করবেন, তখন এটি ভ্যালুগুলোকে যোগ করার বদলে একসাথে জুড়ে দেয়। এটি নতুনদের প্রায়ই বেশ বেকায়দায় ফেলে!

অ্যারিথমেটিক এর ব্যবহার (Arithmetic in Action)

console.log(10 + 3); // 13
console.log(10 - 3); // 7
console.log(10 * 3); // 30
console.log(10 / 3); // 3.3333...
console.log(10 % 3); // 1 (remainder of 10 ÷ 3)
console.log(2 ** 10); // 1024
// The sneaky + with strings
console.log("5" + 3); // "53" (string concatenation, NOT 8!)
console.log("5" - 3); // 2 (subtraction converts the string to a number)
console.log("5" * 2); // 10 (multiplication also converts)
Output
13
7
30
3.3333333333333335
1
1024
53
2
10

=== বনাম == — সমতা বা ইকুয়ালিটি নির্ণয়ের যুদ্ধ (=== vs == — The Battle of Equality)

জাভাস্ক্রিপ্ট শেখার সময় এটি বুঝতে পারা অত্যন্ত গুত্বপূর্ণ। সমতা চেক বা পরীক্ষা করার দুটি উপায় রয়েছে, এবং এগুলো খুব ভিন্ন উপায়ে আচরণ করে:

  • === (স্ট্রিক্ট ইকুয়ালিটি বা strict equality) — এটি ভ্যালু এবং টাইপ উভয়ই একই কি না সেটি চেক করে। কোনো ঘাপলা নেই। আপনার ৯৯% ক্ষেত্রে এটিই ব্যবহার করা উচিত।
  • == (লুস ইকুয়ালিটি বা loose equality) — এটি তুলনা করার আগে ভ্যালুগুলোকে একই টাইপে পরিবর্তন করার চেষ্টা করে। এর ফলে মাঝে মাঝে অদ্ভুত সব রেজাল্ট বা ফলাফল দেখা যায়।

একই জিনিস !== (স্ট্রিক্ট নট-ইকুয়াল) বনাম != (লুস নট-ইকুয়াল)-এর ক্ষেত্রেও ঘটে। সবসময় স্ট্রিক্ট (strict) ভার্সনগুলোই ব্যবহারের চেষ্টা করুন।

স্ট্রিক্ট বনাম লুস ইকুয়ালিটি — যত অদ্ভুত সব ব্যাপার (Strict vs Loose Equality — The Weirdness)

// Strict equality (===) — safe and predictable
console.log(5 === 5); // true
console.log(5 === "5"); // false (number vs string)
console.log(null === undefined); // false
// Loose equality (==) — spooky type coercion
console.log(5 == "5"); // true 😬
console.log(0 == false); // true 😬
console.log("" == false); // true 😬
console.log(null == undefined); // true 😬
console.log(0 == ""); // true 😬😬
// Not-equal works the same way
console.log(5 !== "5"); // true (strict)
console.log(5 != "5"); // false (loose, because it converts first)
Output
true
false
false
true
true
true
true
true
true
false

লজিক্যাল অপারেটর এবং আধুনিক শর্টকাট (Logical Operators & Modern Shortcuts)

লজিক্যাল অপারেটরগুলো আপনাকে একাধিক শর্ত একসাথে যুক্ত করতে দেয় — এগুলো মূলত if স্টেটমেন্টের আঠা হিসেবে কাজ করে।

  • && (AND বা এবং) — এর দুই দিকেরই শর্ত অবশ্যই সত্য হতে হবে
  • || (OR বা অথবা) — এর অন্তত যেকোনো একদিকের শর্ত সত্য হতে হবে
  • ! (NOT বা না) — এটি সত্য (true)-কে মিথ্যা (false)-তে এবং মিথ্যাকে সত্যতে উল্টে দেয় বা পরিবর্তন করে

জ্ঞাত ডেভেলপারদের কাছে জনপ্রিয় জাভাস্ক্রিপ্টে আরও দুটি আধুনিক অপারেটর রয়েছে:

  • ?? (নালিশ কোলিসিং বা nullish coalescing) — এটি ডান দিকের ভ্যালুটি কেবলমাত্র তখনই রিটার্ন করে যখন বাম দিকের ভ্যালুটি null অথবা undefined হয়। || এর মতো এটি 0, "", বা false-কে এমন কিছু হিসেবে গণ্য করে না যা মিসিং বা হারিয়ে গেছে।
  • ?. (অপশনাল চেইনিং বা optional chaining) — এর ফলে আপনি নিরাপদে ডিপলি নেস্টেড বা গভীরে থাকা কোনো প্রপার্টিতে (property) প্রবেশ করতে পারবেন, এবং এই পুরো চেইনের বা দীর্ঘ পথের ভেতর যদি কোনো প্রপার্টিতে null বা undefined থেকেও থাকে তবুও তাতে আপনার কোড ক্র্যাশ করবে না।

লজিক্যাল অপস, টার্নারি, ??, এবং ?. (Logical Ops, Ternary, ??, and ?.)

// Logical operators
let age = 15;
let hasTicket = true;
console.log(age >= 12 && hasTicket); // true (both conditions met)
console.log(age >= 18 || hasTicket); // true (one condition met)
console.log(!hasTicket); // false
// Ternary — the one-line if/else
let greeting = age >= 18 ? "Welcome, adult!" : "Hey, kid!";
console.log(greeting); // "Hey, kid!"
// ?? (nullish coalescing)
let username = null;
console.log(username ?? "Anonymous"); // "Anonymous"
let score = 0;
console.log(score ?? 100); // 0 ✅ (?? keeps 0, because 0 isn't null/undefined)
console.log(score || 100); // 100 😬 (|| treats 0 as falsy!)
// ?. (optional chaining)
let user = { profile: { name: "Zara" } };
console.log(user.profile?.name); // "Zara"
console.log(user.address?.city); // undefined (no crash!)
// Without ?. this would throw: user.address.city → TypeError!
Output
true
true
false
Hey, kid!
Anonymous
0
100
Zara
undefined
Note: এখানে সহজে মনে রাখার মতো একটি শর্টকাট হলো: === জিজ্ঞাসা করে "তোমরা কি পুরোপুরি বা একদম একই জিনিস?" যেখানে == জিজ্ঞাসা করে "তোমরা কি হয়তো, সম্ভবত, যদি আমি ভালোভাবে বোঝার চেষ্টা করি, তাহলে কি তোমরা একই জিনিস?" শুধু সবসময় === ব্যবহার করুন, তাহলে আপনি বিরাট এক অংশের বাগ (bug) থেকে বাঁচবেন।
চ্যালেঞ্জ

ছোট কুইজ

জাভাস্ক্রিপ্টে "5" + 3 এর ফলাফল কী হবে?
Variables & Data TypesStrings & Template Literals