Chapter 4: JavaScript Comparison
4-1: পাশের বাসার আন্টির তুলনা

ক্লাস থেকে বের হলো জাভেদ। মন খারাপ করে আছে হিমেল। একটু পর সে বলতে শুরু করল, আমাদের পাশের বাসায় এক আন্টি থাকে। এই আন্টির কাজ হচ্ছে সারাটা জীবন আমার সাথে তার ছেলের তুলনা করে আমার আম্মুর কান ঝালাপালা করে ফেলা। সুযোগ পেলেই বলতে থাকে। তার ছেলেপেলে বেশি খায়, বেশি ঘুমায়, বেশি নম্বর পায়, বেশি পড়ালেখা করে, বেশি প্রেম করে, বেশি বাম্বু খায়, গায়ে বেশি গন্ধ, বেশি গাধা— এমন তুলনা করতেই থাকে।
শুন, এইসব তুলনা করে কিন্তু তোর প্রোগ্রামিং শেখার কাজ সহজ করে দিছে। আন্টি আটভাবে তোর সাথে তার ছেলের তুলনা করতে পারে?
- Greater than : > (তুলনামূলক বেশি) অন্যদের চাইতে আমার ছেলে বেশি মার্কস পেয়েছে, বেশি স্মার্ট, বেশি বই পড়ে, ইত্যাদি।
- Less than : < (তুলনামূলক কম) আমার ছেলে কম বোকা, কম গাধা, কম মাইর খায় ইত্যাদি।
- Equal : == (সমান সমান) আপনার ছেলে যত মার্কস পাইছে, আমার ছেলেও সমান সমান মার্কস পাইছে।
- Greater than or equal : >= (সমান বা বেশি) আমার স্বামীর বেতন আপনার স্বামীর বেতনের বেশি বা সমান।
- Less than or equal : <= (কম বা সমান) ওই কচি খোকার বয়স আমার ছেলের চাইতে কম বা সমান।
- Not equal : != (অসমান বা ডিফারেন্ট) আমার শ্বশুরের অর্থসম্পদ আপনার শ্বশুরের অর্থসম্পদের সমান না।
- AND : && (দুইটাই) খাওয়ালে বিরিয়ানি এবং বোরহানি দুইটাই খাওয়াতে হবে। কোনোটা বাদ দেয়া যাবে না।
- OR : || (কোনো একটা) আমার সাথে একই রিকশায় উঠতে হলে হয় গোসল করে আসতে হবে, না হয় সেন্ট মেরে আসতে হবে। অন্তত দুইটার যেকোনো একটা করতে হবে। কারণ, আমি গায়ের দুর্গন্ধ নিতে পারি না।
তুলনা শুধু বাস্তবজীবনে নয়, প্রোগ্রামিং ল্যাঙ্গুয়েজেও করা যায়। যেমন JavaScript-এ আমরা কয়েকভাবে তুলনা করতে পারি। অধিকাংশ ক্ষেত্রে আমরা একটা ভেরিয়েবলের মানের সাথে আরেকটা ভেরিয়েবলের মান তুলনা করি, তবে বুঝার সুবিধার্থে প্রথমে কয়েকটা সংখ্যা দিয়ে সরাসরি তুলনা করে দেখি। তারপর বুদ্ধি পোক্ত হলে ভেরিয়েবলের মানের সাথে তুলনা করব। ঠিক হে!
সহজ তুলনা
তুই 5 > 10 দিয়ে জিজ্ঞাসা করতে পারিস, 5, 10 থেকে বড় কি না? তুই কি বলবি? Yes বা No— অর্থাৎ 5, 10-এর চাইতে বড় না। তবে জাভাস্ক্রিপ্টে yes বা No বলবে না; বরং yes হলে true বলবে, আর no হলে false বলবে।
console.log(5 > 10);
Output: false;একইভাবে তুই জিজ্ঞাসা করতে পারিস, 5, 10 থেকে ছোট কি না? এটি যাচাই করতে লিখতে পারিস:
console.log(5 < 10);
Output: true;এটা মানে 5, 10 থেকে ছোট।
একটু কম সহজ তুলনা
এখন আমরা দেখতে পারি, 5, 10-এর সমান কি না। মানুষ হিসেবে আমরা বলতে পারি, 5 আর 10 সমান নয়, কিন্তু প্রোগ্রামিংয়ে এটা বলে দিতে হয়।
console.log(5 == 10);
Output: false;কারণ, 5 আর 10 সমান নয়। এখন 10, 10-এর সমান কি না? এটা তো দুনিয়ার সবাই দেখলেই বলতে পারবে যে, 10, 10-এর সমান, সেটাও দেখা যাক?
console.log(10 == 10);
Output: true.আমরা আবার এটাও করে দেখতে পারি, 10, 10 থেকে বড় অথবা সমান কি না?
console.log(10 >= 10);
Output: true;Yes, এখানে 10, 10 থেকে বড় না, কিন্তু সমান। তাই এটার আউটপুট হিসেবে আমরা true পাই। আবার তুই যদি এখানে দিস, 15, 10 থেকে বড় অথবা সমান কি না? এখানে 15, 10 থেকে বড় হচ্ছে; সমান হচ্ছে না। তাই যেকোনো একটাই যদি সঠিক হয়, তখনই সেটা আউটপুট হিসেবে true দিবে।
console.log(15 >= 10);
Output: true;আবার যদি আমরা উল্টো করে দেখি, যেমন 5, 10-এর থেকে ছোট অথবা সমান কি না? ছোট তো অলরেডি হয়ে গেছে, তাই এখানে আউটপুট আসবে true।
console.log(5 <= 10);
Output: true.এখন তুই answer দেয়ার চেষ্টা কর যে, 10, 10-এর ছোট অথবা সমান কি না? এটার answer তুই নিজে নিজে দে।
একটা সংখ্যা আরেকটা সংখ্যার অসমান (ডিফারেন্ট) কি না, সেটা দেখার জন্য আমরা নট-ইকুয়াল (!=) ব্যবহার করি।
console.log(7 != 10);
Output: true;তুলনা তুলনা করে মাথা তুলা বালিশের তুলা উড়ে ফেলিস না। মাথা ঠান্ডা রাখ। দরকার হলে বাথরুমে গিয়ে পানি ঢাল। তারপর একটা ঘুম দিয়ে উঠে আবার দেখবি। তখন আরেকটু ভালো ফিল করবি। সব কিছু কিন্তু একদিনে বুঝে ফেলবি না। যতবার দেখবি, তত ভালো হবে। এইটাই আসল ফর্মুলা।
JavaScript basic comparison Practice:
তুই আর তোর ছোট ভাইয়ের মধ্যে খাবার কে বেশি খেয়েছে, সেটা তুলনা করবি। তুই 7টা স্যান্ডউইচ খেয়েছিস, আর তোর ছোট ভাই 5টা খেয়েছে। একটা প্রোগ্রাম লিখে দেখ, কে বেশি খেয়েছে।
তোর ক্লাসে 45 জন ছাত্র আছে, আর পাশের ক্লাসে 50 জন। একটা প্রোগ্রাম লিখে দেখ, কোন ক্লাসে বেশি ছাত্র আছে।
তুই আর তোর বন্ধু পরীক্ষায় নম্বর পেয়েছিস। তুই 75 পেয়েছিস, আর তোর বন্ধু পেয়েছে 75। একটা প্রোগ্রাম লিখে চেক কর, তোর আর তোর বন্ধুর নম্বর সমান কি না।
তুই 100 টাকা জমানোর টার্গেট করেছিস। এখন পর্যন্ত 95 টাকা জমাইছিস। একটা প্রোগ্রাম লিখে চেক কর, তুই টার্গেটে পৌঁছাইছিস কি না বা তার চেয়ে বেশি জমাইছিস কি না।
একটা প্রোগ্রাম লিখে দেখ, 10 এবং 7 কি অসমান (Different)।
20 কি 15-এর চাইতে কম বা সমান কি না, সেটা চেক কর।
তুই আর তোর বন্ধু একই সাথে পরীক্ষা দিছস। পরীক্ষার দেয়ার পর তোর বন্ধু কেঁদে কেঁদে বুক ভাসিয়ে ফেলছে। তার পরীক্ষা জঘন্য হইছে, সে ফেল করবে। এক মাস পরে রেজাল্টে দেখা গেছে, তুই পাইছস 45 নম্বর আর বন্ধু পাইছে 97 নম্বর। এইবার চেক করে দেখ, তোর বন্ধু কি তোর চাইতে কম নম্বর পাইছে কি না।
4-2: ভেরিয়েবলের তুলনা কখনো ভুলোনা

মাঝেমধ্যে মনে হবে, দুনিয়ার যত জায়গায় অক্সিজেন আছে, তত জায়গায় তুলনা আছে। কারণ, বাসায় গেলে দেখবি, বাবা-মা হয়তো পাশের বাসার কারো সাথে তোর তুলনা করতেছে। ক্লাসে গেলে দেখবি, অন্য আঁতেলদের মার্কসের সাথে তোর মার্কসের তুলনা করতেছে। খেলতে গেলে তো স্কোর আর রান দিয়ে তুলনা করে। সিনেমা দেখতে গেলে অন্য সিনেমার সাথে তুলনা করে। উঠবে, বসতে, খাইতে, ঘুমাতে— সব জায়গায় দেখবি, দুনিয়ার সবাই তুলনার শিকার হচ্ছে। এমনকি ভেরিয়েবলকেও তুলনা করা যায়।
ধর, দুইটা ভেরিয়েবল ডিক্লেয়ার করলাম, একটা হচ্ছে পেয়ারার প্রাইস, আরেকটা হচ্ছে আপেলের প্রাইস।
const peyaraPrice = 40;
const applePrice = 250;আমরা এখন চাইলে এদেরকে তুলনা করতে পারি, যেভাবে আমরা আগে সংখ্যা তুলনা করেছি। এখানেও একইভাবে ভেরিয়েবলকে তুলনা করতে পারবি। এখন তুই check করতে চাচ্ছিস যে, পেয়ারার দাম কি আপেলের দামের থেকে বেশি কি না?
const peyaraPrice = 40;
const applePrice = 250;
console.log(peyaraPrice > applePrice);
Output: false;এখন চাইলে তুই উল্টোভাবেও তুলনা করতে পারিস যে, আপেলের প্রাইস পেয়ারার প্রাইস থেকে বেশি কি না।
const peyaraPrice = 40;
const applePrice = 250;
console.log(peyaraPrice < applePrice);
Output: true;স্ট্রিং বুলিয়ানের তুলনা
তুলনার সময় শুধু সংখ্যা বা সংখ্যা টাইপের ভেরিয়েবলের তুলনা হয়, এমন না; বরং বুলিয়ান বা স্ট্রিং টাইপের মানের সাথেও তুলনা করা যায়। যেমন:
const myName = "Rahim";
const friendName = "Karim";
console.log(myName == friendName);
Output: false;দুই নামই এক না, তাই false আউটপুট হবে।
একইভাবে বুলিয়ান ভেরিয়েবলের সাথে বুলিয়ান টাইপের ভেরিয়েবলের তুলনা করা যায়।
const myPromise = true;
const friendPromise = false;
console.log(myPromise == friendPromise);
Output: false;এমনকি বুলিয়ান টাইপের ভেরিয়েবলের সাথে বুলিয়ান মানের সরাসরি তুলনাও করা যায়।
const didStudy = true;
console.log(didStudy != false);
Output: true;কোম্পারিজন অপারেটর
comparison মানে তুলনা করা। আর কোম্পারিজন অপারেটর মানে কোনো চিহ্ন দিয়ে তুলনা করবে। যে চিহ্ন দিয়ে তুলনা করবে, সেটার ওপর নির্ভর করে তুলনা আলাদা হবে। আর তুলনা করতে হলে মিনিমাম দুইটা জিনিসের মধ্যে তুলনা করতে হবে। তাই দুইটা জিনিস অর্থাৎ দুইটা ভেরিয়েবল বা দুইটা মান বা একটা ভেরিয়েবল আর একটা মানের মাঝখানে কোম্পারিজন অপারেটর ইউজ করা হয় এবং তুলনা করার সময় কোম্পারিজন অপারেটরের বামপাশের মান বা ভেরিয়েবলের সাথে ডানপাশের মান বা ভেরিয়েবলের তুলনা হবে।
অপারেটর তুলনা:
>বড় কি না চেক করবে<ছোট কি না চেক করবে==সমান সমান কি না চেক করবে!=অসমান (ডিফারেন্ট কি না) চেক করবে>=বড় অথবা সমান কি না চেক করবে<=ছোট অথবা সমান কি না চেক করবে
আমরা ইতোমধ্যে অনেক ধরনের তুলনা সম্পর্কে জেনে গেছি। এই তুলনা সম্পর্কে আরও অনেক কিছু জানব পরবর্তীতে।
JavaScript Variable Comparison Practice:
তোর ছোট ভাইয়ের বয়স 10 বছর, আর তোর বয়স 15 বছর। একটা প্রোগ্রাম লিখে দেখ, তোর ছোট ভাইয়ের বয়স কি তোর বয়স থেকে কম বা সমান কি না।
একটা পরীক্ষায় পাস মার্কস 33। ধর, তুই 45 পেয়েছিস। চেক কর, তুই পাস করেছিস কি না।
দুইটা ভেরিয়েবলে জাম্বুরা আর কদবেলের দাম রাখা হলো। জাম্বুরা কি কদবেলের চেয়ে সস্তা কি না, সেটার তুলনা কর।
তুই 10টা বই পড়েছিস, আর তোর বন্ধু পড়ছে 10টা। চেক কর, তোরা কি সমান সংখ্যক বই পড়েছিস কি না।
তোর কাছে 15টা বিস্কুট আর তোর বন্ধুর কাছে 20টা। চেক কর, তুই কি তোর বন্ধুর থেকে কম বিস্কুট পেয়েছিস কি না।
একটা ফুটবল ম্যাচে রিয়াল মাদ্রিদ 2টা গোল করছে, আর বার্সা 3টা গোল করছে। চেক কর, রিয়াল মাদ্রিদ কি বার্সার চেয়ে কম গোল করেছে কি না।
তোর নাম "Rahim", আর তোর বন্ধুর নাম "Karim"। চেক কর, তোর নাম কি তোর বন্ধুর নামের সমান কি না।
তুই আজকে পড়াশোনা করেছিস (true), আর তোর বন্ধু পড়াশোনা করেনি (false)। চেক কর, তোরা কি একই রকম কাজ করেছিস কি না।
4-3: ডাবল নাকি ট্রিপল ===( এডভান্সড তুলনা)

কপাল ভালো থাকলে দেখবি, পুরি অর্ডার দিছস দুইটা, কিন্তু দিয়ে দিছে তিনটা, কিংবা বিয়ে বাড়িতে খাবার দিচ্ছে তোর ফ্রেন্ড। তাকে বললি, দুইটা রসগোল্লা দে, আর সে দিয়ে দিছে তিনটা। তুই তো খুশিতে গদ গদ হয়ে যাবি।
এই দুইটার জায়গায় তিনটা মাঝেমধ্যে জাভাস্ক্রিপ্টেও দেখতে পাবি এবং প্রথম প্রথম একটু ভেজাইল্লা মনে হবে। কিন্তু দুই দিন পরে দেখবি— দুইটার জায়গায় তিনটা রসগোল্লা পেয়ে যত খুশি হইছস, দুইটার জায়গায় তিনটা সমান চিহ্ন পেয়ে তার চেয়েও বেশি খুশি হবি।
আমরা এর আগে জেনেছিলাম, দুইটা সংখ্যা তুলনা করার জন্য ডাবল ইকুয়াল (==) ব্যবহার করি। যেমন, দুইটা সংখ্যাই সমান কি না। এটা তুলনা করার জন্য আমরা ডাবল ইকুয়াল (==) ব্যবহার করি, কিন্তু কিছু কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজে ট্রিপল ইকুয়ালে (===) কিছু কাজ সম্পন্ন হয়।
এখন যদি আমরা 10 == 10 লিখি, যা আমরা কিছুক্ষণ আগে দেখছি যে 10 10-এর সমান, এটার জন্য true আসবে।
console.log(10 == 10);
Output: true.এখন যদি এখানে কোনো একটা সংখ্যাকে String করে দেই বা সিঙ্গেল কোটেশনের মধ্যে রাখি, তখন ব্যাপারটা কী হবে?
console.log(10 == "10");
Output: true;যখন আমরা ডাবল ইকুয়াল (==) দিয়ে compare করি, তখন শুধু মানটাকে compare করা হয়। এরা কী টাইপের ডাটা, সেটা কম্পেয়ার করে বা তুলনা করে দেখে না। এখন যদি কী টাইপের ডাটাও compare করে দেখতে চাস, তখন ট্রিপল ইকুয়াল (===) দিয়ে চেক করতে পারিস। যেমন:
console.log(10 == "10" );
console.log(10 === "10" );
Output: true
false.এখন দুইটা রেজাল্টের মধ্যে দুই রকম রেজাল্ট দিচ্ছে, ঘটনা কী?
ঘটনা হচ্ছে, যখন তুই ডাবল ইকুয়াল (==) দিয়ে চেক করিস, তখন সে শুধু মানটাকে তুলনা করে। সেটা কোন ধরনের টাইপের ডাটা, সেটা সে তুলনা করে না। এখানে একটা ছিল string, আরেকটা ছিল সংখ্যা, কিন্তু দুইটার মান সেইম। এখন যখন তুই ট্রিপল ইকুয়াল (===) ব্যবহার করিস, তখন সে কী চেক করে?
সে চেক করে সেটার মান এবং সেটার ডাটা টাইপ।
তাই যেটার মধ্যে ডাবল ইকুয়াল (==) ব্যবহার করে চেক করা হয়েছে, সেটার জন্য আউটপুট true আসছে এবং যেটার মধ্যে ট্রিপল ইকুয়াল (===) চেক করা হয়েছে, যেহেতু এখানে দুইটা টাইপ সমান না, তাই আউটপুট false আসছে।
এখন তুই চাইলে এটাকে বিভিন্নভাবে প্র্যাকটিস করতে পারিস। যেমন ধর:
console.log(120 === "tomato");এখন এটার আউটপুট কী আসবে, সেটা তুই বল।
আরেকটা opposite জিনিস আছে, সেটা হচ্ছে not equal (!=). Similar হিসাব তুই যদি দেখতে চাস:
console.log(10 != 10);
Output: false;এখানে কন্ডিশনে কী বলতেছে? not equal মানে সমান না, কিন্তু ওপরের মান দুইটাই সমান। তাই এই কন্ডিশনের আউটপুট false হবে। আবার এখানে যদি একটাকে String বানানো হয়:
console.log(10 != "10");এই ক্ষেত্রে কি আউটপুটের কোনো পরিবর্তন আসবে না, যেহেতু এখানে শুধু মানকে চেক করা হচ্ছে। সেজন্য এখানে আউটপুট হবে false। এখন যদি আমরা এটাকে এরকমভাবে লিখি:
console.log(10 !== "10");এটার আউটপুট কী হবে? এটার আউটপুট হবে true। কারণ, এখানে সে ডাটা টাইপটাও ম্যাচ করতেছে।
JavaScript Advanced Comparison Practice:
তোর কাছে 50 টাকা আছে, আর বন্ধুর কাছে আছে "50" টাকা (স্ট্রিং হিসেবে)। একটা প্রোগ্রাম লিখে দেখ, 50 == "50" দিলে আর 50 === "50" দিলে আউটপুট কী আসবে।
তোর প্রোগ্রামিং নোটবুকে "JavaScript" লিখে রেখেছিস, আর এটা একটা স্ট্রিং টাইপ ডাটা। এখন তুই দেখতে চাস "JavaScript" == 'JavaScript' আর "JavaScript" === 'JavaScript' দিলে কী আউটপুট আসবে। ব্যাখ্যা কর, কেন একই আউটপুট আসছে।
একটা প্রোগ্রাম লিখে দেখ, 25 এবং "25"-এর মধ্যে 25 == "25" এবং 25 === "25" দিলে কী আউটপুট আসবে এবং কেন সেটা হয়, সেটা কমেন্ট করে লিখ।
"apple" এবং "apple" লিখে তুলনা করলে, "apple" == "apple" এবং "apple" === "apple"-এর আউটপুট কী হবে।
একটা প্রোগ্রাম লিখে দেখ, "test" এবং "TEST"-এর মধ্যে "test" == "TEST" এবং "test" === "TEST"-এর আউটপুট কী হবে।
variableX-এর মান 15 আর variableY-এর মান "20" দিলে variableX != variableY এবং variableX !== variableY-এর আউটপুট কী হবে।
variableA-এর মান hello আর variableB-এর মান "Hello"। এখন variableA == variableB এবং variableA === variableB চেক করার প্রোগ্রাম লিখ।
