রহস্যময়ী জাভাস্ক্রিপ্টঃ Math.max() কেনো -Infinity এবং Math.min() কেনো Infinity?

আপনারা হয়তো এটা খেয়াল করে থাকবেন যে Math.max() সমান (নেগেটিভ) ইনফিনিটি -Infinity, আর Math.min() সমান (পজিটিভ) ইনফিনিটি Infinity দেখাচ্ছেঃ

Math.max()
// -Infinity 

Math.min()
// Infinity 

এটার সবচেয়ে সিম্পল এক্সপ্লেনেশন হতে পারে ইকমাস্ক্রিপ্ট এর স্ট্যান্ডার্ড এরকম বলা আছে তাই এটা হচ্ছে। আপনারা যদি ইকমাস্ক্রিপ্ট এর স্ট্যান্ডার্ড দেখেন তাহলে দেখবেন এরকমভাবে বলা আছে যে Math.max এর ক্ষেত্রে লোয়েস্ট ভ্যালু হবে -Infinity(সোর্স), আর Math.min এর ক্ষেত্রে পজিটিভ Infinity(সোর্স)। এটার সাথে আরো বলা আছে কোন ভ্যালু যদি NaN হয়, তাহলে রেজাল্টও NaN হবে উভয়ক্ষেত্রেই। তাছাড়া এখানে সবসময়েই (পজিটিভ) 0 কে -0 থেকে বড় ধরা হবে।

লজিক্যাল ব্যাখ্যাঃ

স্পেসেফিকেশন ছাড়াও একটার একটা লজিক্যাল ব্যাখ্যা আছে। এই যেমন ধরেন Math.min এর ক্ষেত্রে লোয়েস্ট ইনিশিয়াল ভ্যালু Infinity হলে তাহলে বাকি যতো নাম্বারই এখানে থাকুক না কেন সবাই এই Infinity এর চাইতে অবশ্যই ছোটো হবে। আমাদের এটার কাজ যেহেতু সবচেয়ে ছোটো সংখ্যা বের করা, তাই এটার ইনিশিয়াল ভ্যালু সবচেয়ে ম্যাক্সিমাম পসিবল ভ্যালু যেটা আমাদের ক্ষেত্রে পজিটিভ Infinity হিসেবে গণ্য করতে পারেনঃ

1 < Infinity
// true 

1 > Infinity 
// false

আরেকটু ভালোভাবে বুঝতে চাইলে ব্যাপারটা একটা ইউজ কেসের কথা ভাবতে পারেন। যেমনঃ আপনি Math.min এ মাত্র একটা নাম্বার আর্গুমেন্ট হিসেবে পাস করলেনঃ

Math.min(-35454)

একটা থাকলে অবশ্যই এটাই মিনিমাম ভ্যালু হবে এবার সেটা যতই হউক না কেন। বাট লজিক্যালি যদি দেখতে চান ব্যাপারটা যে এখানে যে ভ্যালুই দেন না কেন, সেটা কিসের তুলনায় সবসময়েই ছোটো হিসেবে গণ্য করা হবে? এখানে -35454 পাস করেছি যেটা অবশ্যই -35453 এর চাইতে ছোটো(নেগেটিভ যেহেতু)। কিন্তু এখানে যদি (পজিটিভ) 35454 থাকতো সেটা কিন্তু আবার -35453 এর চাইতে ছোটো হতো না। তো আমাদের কম্পারিজনের জন্য এমন একটা ভ্যালু দরকার যেটা সবসময়েই এখানে দেওয়া ভ্যালুর চাইতে বড় হবে, আর সেটা হচ্ছে (পজিটিভ) Infinity

লজিক্যাল ব্যাখ্যা মানে বিহ্যাইন্ড দ্যা সীনে ঠিক এভাবেই কাজ করে সেটা কিন্তু না, এটা জাস্ট কেনো এরকমটা হতে পারে সেটার একটা লজিক্যাল ব্যাখ্যা মাত্র...

সেইম কথাটা Math.max এর ক্ষেত্রেও প্রযোজ্য। এখানেও ইনিশিয়াল হাইয়েস্ট ভ্যালু সবচেয়ে কম পসিবল নাম্বার, যেটা এখানে -Infinity হিসেবে গণ্য করতে পারেন। তারপর যতো নাম্বারই আসুক না কেন সেগুলো অবশ্যই এটা থেকে বড় হবেঃ

1 > -Infinity
// true

1 < -Infinity 
// false

আশা করি এবার কিছুটা হলেও আর্গুমেন্ট পাস না করা হলে কেনো এদের ভ্যালু এরকম দেখায় সেটার সেন্স তৈরি হবে।

তারপর এখানে আরেকটা জিনিস খেয়াল করবেন, যখনি আপনি কোন NaN আর্গুমেন্ট পাস করবেন, তখনই এরা NaN রেজাল্ট শো করবেঃ

Math.max(1, 2, 3, 4, 5, 6, 7, 8, 9, 'dfdfdf');
// NaN

Math.min(1, 2, 3, 4, 5, 6, 7, 8, 9, 'dfdfdf');
// NaN

+'dfdfdf'
// NaN

আর (পজিটিভ) 0 কে সবসময়েই -0 থেকে বড় দেখাবেঃ

Math.min(0, -0)
// -0

Math.max(0, -0)
// 0

শেয়ার করুন

লেখাটি ভাল লাগলে সোশ্যাল মিডিয়ায় শেয়ার করুন। আপনার কলিগ, বন্ধু কিংবা প্রিয় কারও কাজে লাগতে পারে। জানেন তো, শেয়ারিং ইজ কেয়ারিং!

সাবস্ক্রিপশন সেন্টার

প্রতিদিন ওয়েবসাইটে আসা আপনার জন্য কষ্টকর হতে পারে। তাই যখনই আমি নতুন ব্লগ পোস্ট, সিরিজ, বই বা ভিডিও পাবলিশ করব,
তখনই তা আপনার ইমেইলে পেতে সাবস্ক্রাইব করুন। নো স্প্যামিং প্রমিজ!