জাভাস্ক্রিপ্টে `Number` ক্লাস

জাভাস্ক্রিপ্টে `Number` ক্লাস

এই প্রবন্ধে জাভাস্ক্রিপ্টের Number ক্লাস ব্যাখ্যা করা হয়েছে।

আমরা ধাপে ধাপে Number এর বৈশিষ্ট্য, সাধারণ ভুল, প্রয়োজনীয় এপিআই এবং ব্যবহারিক উদাহরণগুলি বিস্তারিতভাবে ব্যাখ্যা করব।

YouTube Video

জাভাস্ক্রিপ্টে Number ক্লাস

Number হচ্ছে জাভাস্ক্রিপ্টের মৌলিক সংখ্যা টাইপ এবং এটি IEEE-754 ডাবল-প্রিসিশন ফ্লোটিং পয়েন্ট (৬৪-বিট) আকারে উপস্থাপিত হয়।

মূল বিষয়: নম্বর উপস্থাপন এবং টাইপ চেকিং

জাভাস্ক্রিপ্টে, সমস্ত সংখ্যা প্রাথমিক number টাইপ হিসেবে উপস্থাপিত হয়।

 1// Primitive numbers and Number object
 2const a = 42;                 // primitive number
 3const b = 3.14;               // primitive float
 4const c = Number(10);         // primitive via constructor call (function form)
 5const d = new Number(10);     // Number object (wrapper)
 6
 7console.log(typeof a);        // "number"
 8console.log(typeof d);        // "object"
 9console.log(c == d);          // true  (value coerces)
10console.log(c === d);         // false (different types)
  • এই কোডটি প্রিমিটিভ number এবং Number র‍্যাপার অবজেক্ট-এর মধ্যে পার্থক্য দেখায়। সাধারণত, র‍্যাপারের পরিবর্তে প্রিমিটিভ গুলোই ব্যবহৃত হয়।

বিশেষ মান: NaN, Infinity, এবং কন্সট্যান্টসমূহ

Number বিশেষ মান (NaN, Infinity) এবং কন্সট্যান্ট সরবরাহ করে।

 1// Special numeric values and constants
 2console.log(Number.NaN);                 // NaN
 3console.log(Number.POSITIVE_INFINITY);   // Infinity
 4console.log(Number.NEGATIVE_INFINITY);   // -Infinity
 5
 6console.log(Number.MAX_VALUE);           // largest positive representable
 7console.log(Number.MIN_VALUE);           // smallest positive representable (closest to 0)
 8console.log(Number.MAX_SAFE_INTEGER);    // 9007199254740991
 9console.log(Number.MIN_SAFE_INTEGER);    // -9007199254740991
10console.log(Number.EPSILON);             // smallest difference ~2.220446049250313e-16
  • MAX_SAFE_INTEGER সমান বা বড় পূর্ণসংখ্যা সঠিকভাবে উপস্থাপিত নাও হতে পারে। যদি সঠিকতা প্রয়োজন হয় তাহলে BigInt ব্যবহারের কথা ভাবুন। EPSILON ফ্লোটিং-পয়েন্ট তুলনার জন্য ব্যবহৃত হয়।

নম্বর রূপান্তর: Number(), parseInt, parseFloat, এবং + অপারেটর

স্ট্রিংকে নম্বরে রূপান্তর করার বিভিন্ন উপায় আছে, এবং প্রতিটির আচরণ আলাদা।

 1// Converting strings to numbers
 2console.log(Number("42"));        // 42
 3console.log(Number("  3.14 "));   // 3.14
 4console.log(+ "7");               // 7 (unary +)
 5
 6console.log(parseInt("42px"));    // 42
 7console.log(parseFloat("3.14abc"));// 3.14
 8
 9// Careful with parseInt and radix
10console.log(parseInt("08"));      // 8
11console.log(parseInt("08", 10));  // 8 (explicit radix is safer)
  • Number() কেবলমাত্র পুরো স্ট্রিংটি কঠোরভাবে সংখ্যাসূচক হলে মান দেয়, নাহলে NaN ফেরত দেয়; অন্যদিকে, parseIntparseFloat স্ট্রিংয়ের শুরু থেকে সংখ্যানুযায়ী অংশ পার্স করে। parseInt ব্যবহার করার সময় র‍্যাডিক্স স্পষ্টভাবে নির্দিষ্ট করা সবসময়ই নিরাপদ।

NaN পরিচালনা ও পরীক্ষা: isNaN এবং Number.isNaN

NaN (Not-A-Number) বিশেষ কারণ NaN !== NaN। তারা যেভাবে সত্যতা যাচাই করে তার মধ্যে পার্থক্য আছে; গ্লোবাল isNaN টাইপ কনভার্সন করে এবং ভুল ইতিবাচক ফলাফল দিতে পারে, তাই Number.isNaN ব্যবহারের পরামর্শ দেওয়া হয়।

1// NaN detection differences
2console.log(NaN === NaN);             // false
3
4console.log(isNaN("foo"));            // true  -> because "foo" coerces to NaN
5console.log(Number.isNaN("foo"));     // false -> "foo" is not the numeric NaN
6
7console.log(Number.isNaN(NaN));       // true
  • অপ্রয়োজনীয় টাইপ পরিবর্তন এড়াতে সংখ্যা পরীক্ষা ও গাণিতিক ফলাফল যাচাইয়ের জন্য Number.isNaN ব্যবহার করুন।

Number.EPSILON ব্যবহার করে ভাসমান বিন্দু ত্রুটি এবং তুলনা

IEEE-754 এর কারণে 0.1 + 0.2 !== 0.3 এর মতো ত্রুটি দেখা যায়। কঠোর তুলনার জন্য, পার্থক্য এবং Number.EPSILON ব্যবহার করা সাধারণ।

1// Floating point precision example and EPSILON comparison
2const sum = 0.1 + 0.2;
3console.log(sum === 0.3);             // false
4
5function nearlyEqual(a, b, epsilon = Number.EPSILON) {
6  return Math.abs(a - b) <= epsilon * Math.max(1, Math.abs(a), Math.abs(b));
7}
8
9console.log(nearlyEqual(sum, 0.3));   // true
  • তুলনায় ত্রুটি মেনে নেওয়ার ক্ষেত্রে, স্কেলিং এবং অ্যাবসলিউট ডিফারেন্স ব্যবহারকারী nearlyEqual-এর মতো শক্তিশালী ইমপ্লিমেন্টেশন সুপারিশ করা হয়।

পূর্ণসংখ্যা ও নিরাপদ পূর্ণসংখ্যা পরীক্ষা (isInteger, isSafeInteger)

কোনো মান পূর্ণসংখ্যা কি না এবং নিরাপদ সীমার মধ্যে আছে কি না তা যাচাইয়ের জন্য API রয়েছে।

1// Integer and safe integer checks
2console.log(Number.isInteger(3));                 // true
3console.log(Number.isInteger(3.0));               // true
4console.log(Number.isInteger(3.1));               // false
5
6console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)); // true
7console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)); // false
  • বড় পূর্ণসংখ্যার সঠিকতা প্রয়োজন হলে Number.isSafeInteger দিয়ে পরীক্ষা করুন এবং সীমা অতিক্রম করলে BigInt ব্যবহারের কথা ভাবুন।

প্রদর্শন ও ফরম্যাটিং: toFixed, toPrecision, toString

সংখ্যা কিভাবে প্রদর্শিত হবে তা নিয়ন্ত্রণের জন্য বিভিন্ন মেথড আছে। toFixed নির্দিষ্ট দশমিক স্থানসহ স্ট্রিং দেয়, তবে রাউন্ডিংয়ের ব্যাপারে সতর্ক থাকতে হবে।

1// Formatting numbers for display
2const x = 1.23456;
3console.log(x.toFixed(2));         // "1.23"   (string)
4console.log(x.toPrecision(3));     // "1.23"   (string with total significant digits)
5console.log((255).toString(16));   // "ff"     (hexadecimal string)
  • toFixed একটি স্ট্রিং ফেরত দেয়, তাই গণনার জন্য নম্বরে রূপান্তরিত করলে মান কী হচ্ছে তা খেয়াল রাখুন।

স্ট্রিং সংযুক্তি এবং + অপারেটর সংক্রান্ত সতর্কতা

+ অপারেটর সংখ্যার যোগ এবং স্ট্রিং সংযুক্তি—উভয়ের জন্যই ব্যবহৃত হয়, তাই ডেটা টাইপের ওপর নির্ভর করে অপ্রত্যাশিত ফলাফল হতে পারে।

1// Pitfall with + operator and type coercion
2console.log(1 + 2 + "px");    // "3px"
3console.log("px" + 1 + 2);    // "px12"
4console.log(1 + "2" - 0);     // 3  (string coerced to number for subtraction)
  • যখন স্ট্রিং ও নম্বর মিশ্রিত হয়, তখন ইম্প্লিসিট টাইপ কনভার্সন এড়াতে স্পষ্টভাবে String(), Number() বা টেমপ্লেট লিটারাল ব্যবহার করাই নিরাপদ।

উন্নত ব্যবহার: Number.parseInt / Number.parseFloat, valueOf

Number.parseInt এবং Number.parseFloat গ্লোবাল ফাংশনের উপনাম। valueOf একটি Number অবজেক্ট থেকে প্রিমিটিভ মান বের করতে ব্যবহৃত হয়, তবে বাস্তবে খুব কমই প্রয়োজন হয়।

1// Number.parseInt/parseFloat aliases and valueOf example
2console.log(Number.parseInt("100", 10));   // 100
3console.log(Number.parseFloat("3.14"));    // 3.14
4
5const nObj = new Number(5);
6console.log(nObj.valueOf());               // 5
7console.log(nObj + 1);                     // 6  (object coerced to primitive)
  • Number.parseInt এবং Number.parseFloat ব্যবহারের সময় র‍্যাডিক্স ও ইনপুট ট্রিমের ব্যাপারে সতর্ক থাকুন। র‍্যাপার অবজেক্ট সাধারণত এড়ানো হয়।

তথ্যসূত্র: ছোট ইউটিলিটি উদাহরণ - নম্বর যাচাই ফাংশন

এখানে কিছু ছোট ইউটিলিটি ফাংশন দেওয়া হয়েছে যা সাধারণ চেকগুলো একত্র করে। এতে ইনপুট যাচাইয়ের কাজ সহজ হয়ে যায়।

 1// Small number utility functions
 2function toNumberStrict(value) {
 3  // Return a Number or throw for invalid numeric strings
 4  const n = Number(value);
 5  if (typeof value === "string" && value.trim() === "") {
 6    throw new Error("Empty string is not a valid number");
 7  }
 8  if (Number.isNaN(n)) {
 9    throw new Error(`Invalid number: ${value}`);
10  }
11  return n;
12}
13
14function almostEqual(a, b, eps = Number.EPSILON) {
15  // Robust relative comparison
16  return Math.abs(a - b) <= eps * Math.max(1, Math.abs(a), Math.abs(b));
17}
  • এগুলো অত্যন্ত বহুমুখী ফাংশন, যা ইনপুট প্রসেসিং এবং তুলনা করার জন্য বারবার ব্যবহার করা যায়। যেসব ইম্প্লিমেন্টেশন ত্রুটি ছুড়ে দেয়, সেগুলো যাচাইয়ের কাজে সহায়ক।

কর্মদক্ষতা ও সেরা অনুশীলনের সংক্ষিপ্তসারণ

Number ব্যবহারের সময় নিচের ব্যবহারিক বিষয়গুলো মনে রাখা ভালো।

  • মূলত, প্রিমিটিভ number টাইপ ব্যবহার করুন এবং new Number() এড়িয়ে চলুন।
  • স্ট্রিং-থেকে-নম্বর রূপান্তরের ক্ষেত্রে ব্যবহারের প্রয়োজনে Number() (কঠোর), অথবা parseInt/parseFloat (আংশিক) বাছাই করুন।
  • নিরাপদভাবে পরীক্ষা করার জন্য Number.isNaN এবং Number.isFinite ব্যবহার করুন।
  • ফ্লোটিং-পয়েন্ট তুলনার জন্য Number.EPSILON ব্যবহার করুন অথবা আলাদা তুলনা ফাংশন তৈরি করুন।
  • পূর্ণসংখ্যার নির্ভুলতা দরকার হলে Number.isSafeInteger ব্যবহার করুন এবং সীমার বাইরে গেলে BigInt ব্যবহার করুন।
  • তোমরা ডিসপ্লের জন্য রাউন্ড করতে toFixed অথবা toPrecision ব্যবহার করতে পারো, তবে লক্ষ্য রাখো যে রিটার্ন ভ্যালু একটি স্ট্রিং হবে।

সারসংক্ষেপ

Number হল জাভাস্ক্রিপ্টের সব সংখ্যার জন্য মৌলিক টাইপ—পূর্ণসংখ্যা, দশমিক ও বিশেষ মান (NaN এবং Infinity) সহ। টাইপ কনভার্সন ও ফ্লোটিং-পয়েন্ট ত্রুটি সম্পর্কে সচেতন থাকা এবং Number.isNaN, Number.EPSILON-এর মতো মেথড সঠিকভাবে ব্যবহার করাটা গুরুত্বপূর্ণ। নিরাপদ পূর্ণসংখ্যার সীমা ছাড়িয়ে গেলে BigInt ব্যবহার করুন, এবং রাউন্ডিং ও প্রদর্শনের জন্য toFixed বা toPrecision ব্যবহার করুন।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video