ডাবল নাকি ট্রিপল ===( এডভান্সড তুলনা)

কপাল ভালো থাকলে দেখবি, পুরি অর্ডার দিছস দুইটা, কিন্তু দিয়ে দিছে তিনটা, কিংবা বিয়ে বাড়িতে খাবার দিচ্ছে তোর ফ্রেন্ড। তাকে বললি, দুইটা রসগোল্লা দে, আর সে দিয়ে দিছে তিনটা। তুই তো খুশিতে গদ গদ হয়ে যাবি।
এই দুইটার জায়গায় তিনটা মাঝেমধ্যে জাভাস্ক্রিপ্টেও দেখতে পাবি এবং প্রথম প্রথম একটু ভেজাইল্লা মনে হবে। কিন্তু দুই দিন পরে দেখবি— দুইটার জায়গায় তিনটা রসগোল্লা পেয়ে যত খুশি হইছস, দুইটার জায়গায় তিনটা সমান চিহ্ন পেয়ে তার চেয়েও বেশি খুশি হবি।
আমরা এর আগে জেনেছিলাম, দুইটা সংখ্যা তুলনা করার জন্য ডাবল ইকুয়াল (==) ব্যবহার করি। যেমন, দুইটা সংখ্যাই সমান কি না। এটা তুলনা করার জন্য আমরা ডাবল ইকুয়াল (==) ব্যবহার করি, কিন্তু কিছু কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজে ট্রিপল ইকুয়ালে (===) কিছু কাজ সম্পন্ন হয়।
এখন যদি আমরা 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 চেক করার প্রোগ্রাম লিখ।