Variables, Values ও Types
- const ও let দিয়ে variable ঘোষণা করতে পারবেন এবং কখন কোনটি তা বলতে পারবেন
- number, string, boolean, undefined, null চিনতে ও typeof দিয়ে যাচাই করতে পারবেন
- string-number মিশ্রণের বাগ খুঁজে Number() দিয়ে ঠিক করতে পারবেন
সমস্যাটা কী?
চেকআউট পেজে পণ্যের দাম ৮০০ আর ডেলিভারি ১৫০। কোড লিখল মোট = দাম + ডেলিভারি, আর স্ক্রিনে এলো ৮০০১৫০! গ্রাহক ভয় পেয়ে চলে গেলেন। কম্পিউটার যোগ না করে পাশাপাশি জুড়ে দিল কেন?
শেখার লক্ষ্য
- const ও let দিয়ে variable ঘোষণা করতে পারবেন এবং কখন কোনটি তা বলতে পারবেন
- number, string, boolean, undefined, null চিনতে ও typeof দিয়ে যাচাই করতে পারবেন
- string-number মিশ্রণের বাগ খুঁজে Number() দিয়ে ঠিক করতে পারবেন
পূর্বশর্ত
ব্যাখ্যা
মান (value) হলো ডেটার একটি টুকরো: 800, "শার্ট", true। ভেরিয়েবল (variable) হলো সেই মানের নাম, যাতে পরে ব্যবহার করা যায়।
const price = 800; // const: পরে আর বদলানো যাবে না
let quantity = 1; // let: পরে বদলানো যাবে
quantity = 2; // ঠিক আছে
// price = 900; // এটি করলে TypeError হবেনিয়ম: ডিফল্ট হিসেবে const ব্যবহার করুন; শুধু যখন মান সত্যিই বদলাবে তখন let। (পুরনো কোডে var দেখবেন—এর স্কোপ-নিয়ম বিভ্রান্তিকর, তাই এই কোর্সে ব্যবহার করব না।)
| টাইপ | উদাহরণ | কখন |
|---|---|---|
| number | 800, 0.5, -3 | দাম, পরিমাণ, স্কোর—পূর্ণ ও দশমিক দুটোই একই টাইপ |
| string | "শার্ট", 'ঢাকা' | লেখা; কোটেশনের ভেতরে |
| boolean | true, false | হ্যাঁ/না সিদ্ধান্ত |
| undefined | undefined | মান এখনও দেওয়া হয়নি |
| null | null | ইচ্ছাকৃতভাবে “কোনো মান নেই” |
typeof অপারেটর কোনো মানের টাইপ বলে দেয়: typeof 800 → "number"। (একটি পুরনো অদ্ভুততা: typeof null → "object"—এটি ভাষার ঐতিহাসিক বাগ।)
বাগের কারণ: + অপারেটরের দুই কাজ। দুই পাশে number থাকলে যোগ করে; যেকোনো এক পাশে string থাকলে জুড়ে দেয় (concatenation)। ফর্ম বা টেক্সট বক্স থেকে আসা মান সাধারণত string হয়—তাই "800" + "150" = "800150"। সমাধান: হিসাবের আগে Number("800") দিয়ে number বানানো।
উপমা — এবং কোথায় ভাঙে
উপমা: Variable হলো রান্নাঘরের লেবেল-লাগানো কৌটা; ভেতরের জিনিস হলো value; “চাল/লবণ” লেবেলের মতো type বলে দেয় জিনিসটি কী ধরনের।
কোথায় ভাঙে: বাস্তবে লবণের কৌটায় চাল রাখলে চোখে পড়ে। JavaScript-এ একই variable-এ আগে number পরে string রাখা যায় (let দিয়ে), আর ভাষা কোনো সতর্কবার্তা দেয় না—ভুল ধরা পড়ে অনেক পরে, যেমন ৮০০১৫০।
ধাপে ধাপে উদাহরণ
ধাপে ধাপে বাগ ধরা ও ঠিক করা:
const priceText = "800"; // ফর্ম থেকে আসা—string
const delivery = 150; // number
console.log(priceText + delivery); // "800150"
console.log(typeof priceText, typeof delivery);
const price = Number(priceText); // রূপান্তর
console.log(price + delivery); // 950800150 string number 950
- প্রথম লাইনে আউটপুট অদ্ভুত—তাই টাইপ দেখি।
typeofজানায় একটি string, একটি number। string থাকায় + জুড়ে দিয়েছে।Number()দিয়ে রূপান্তর করে আবার যোগ—এবার সঠিক ৯৫০।
Number("abc") দিলে ফল NaN (Not a Number)—এটিও number টাইপ, কিন্তু অর্থ “অবৈধ সংখ্যা”। Number.isNaN(x) দিয়ে যাচাই করা যায়।
অনুশীলন / অ্যাক্টিভিটি
console.log আউটপুট দেখায়। ব্রাউজারের DOM, নেটওয়ার্ক (fetch), টাইমার বা ফাইল এখানে নেই—ইচ্ছাকৃতভাবে। Ctrl/⌘ + Enter চাপলেও Run হয়।চেকআউট মোট ঠিক করুন
// সমস্যা: মোট ভুল আসছে। টাইপ দেখে ঠিক করুন।
const priceText = "800"; // ফর্ম থেকে এসেছে
const qtyText = "2"; // ফর্ম থেকে এসেছে
const delivery = 150;
const total = priceText * qtyText + delivery; // এটা কি ঠিক?
const label = "মোট: " + total + " টাকা";
console.log(label);
// এবার এই লাইনটা দেখুন:
const wrong = priceText + delivery;
console.log("ভুল যোগ:", wrong, typeof wrong);লাইন ধরে বুঝি
priceText * qtyText:*শুধু গুণ করে, তাই JavaScript নিজে string-কে number বানায় (implicit conversion)। ফল ঠিক আসে—কিন্তু এটি ভাগ্যের ওপর নির্ভর।priceText + delivery:+string দেখে জুড়ে দেয় →"800150"।Number(...): স্পষ্ট রূপান্তর (explicit conversion)। কোড পড়েই বোঝা যায় কী হচ্ছে।"মোট: " + total + " টাকা": এখানে জুড়ে দেওয়াটাই উদ্দেশ্য—লেখা বানানো।
এখানে এটা কেন ব্যবহার করেছি?
ইনপুট সবসময় স্পষ্টভাবে রূপান্তর করার অভ্যাস পরে মডেলের কোডে কাজে লাগবে: CSV বা JSON থেকে আসা সংখ্যা প্রায়ই string থাকে, আর ভুল টাইপে ভেক্টর হিসাব নীরবে ভুল ফল দেয়।
কোন বিষয়গুলো মনে রাখব?
- ডিফল্ট const, বদলালে let
- + এর এক পাশে string থাকলে জুড়ে দেয়
- বাইরে থেকে আসা মান Number() দিয়ে রূপান্তর করুন
- NaN = অবৈধ সংখ্যা; Number.isNaN দিয়ে যাচাই
এখনই কোনগুলো মুখস্থ করতে হবে না?
- BigInt, Symbol টাইপ
- implicit conversion-এর সব নিয়ম
- var-এর hoisting নিয়ম
নিজে পরিবর্তন করে দেখুন
console.log("5" - 2, "5" + 2, "5" * "2", true + 1) চালানোর আগে প্রতিটির ফল অনুমান করে লিখুন। তারপর চালিয়ে মিলিয়ে নিন। কোনটি আপনাকে অবাক করল?
সাধারণ ভুল
- ফর্মের মান number ধরে নেওয়া
- const দিয়ে ঘোষণা করে পরে বদলানোর চেষ্টা (TypeError)
- NaN-কে === দিয়ে যাচাই করা—NaN === NaN সবসময় false
জ্ঞান যাচাই
নিচের 3টি প্রশ্নের উত্তর দিয়ে “জমা দিন” চাপুন। স্কোর সার্ভারে যাচাই হয়; প্রতিটি উত্তরের পর কেন সঠিক বা ভুল তা দেখাবে। লগইন থাকলে ফল আপনার অগ্রগতিতে সংরক্ষিত হয়।
সংক্ষেপে মনে রাখুন
- মান + টাইপ + নাম = variable
- + অপারেটরের দ্বৈত আচরণ বাগের উৎস
- স্পষ্ট রূপান্তর ও typeof দিয়ে ডিবাগ
পরবর্তী পাঠ
একাধিক মান একসাথে রাখতে লাগবে array ও object: Arrays ও Objects
সূত্র ও যাচাই
জ্ঞান যাচাই
আপনার শেখার অগ্রগতি সংরক্ষণ করতে লগইন করুন।
এখানে প্রশ্ন করুন
আপনার শেখার অগ্রগতি সংরক্ষণ করতে লগইন করুন।