JavaScript ನ Math object ಎಂಬುದು ಈ ಭಾಷೆಯ ಒಂದು ಮೌನವಾದ utility belt ಇದ್ದಂತೆ. ನೀವು ಇದನ್ನು ಎಂದಿಗೂ instantiate ಮಾಡುವುದಿಲ್ಲ ಅಥವಾ import ಮಾಡುವುದಿಲ್ಲ. ಇದು ಪ್ರತಿಯೊಂದು runtime ನಲ್ಲಿ ಲಭ್ಯವಿರುತ್ತದೆ, ಒಂದು ಪಿಕ್ಸೆಲ್ ಮೌಲ್ಯವನ್ನು raund ಮಾಡುವುದರಿಂದ ಹಿಡಿದು ಯಾದೃಚ್ಛಿಕ (random) ದಾಳದ ಸಂಖ್ಯೆಯನ್ನು (dice roll) ಉತ್ಪಾದಿಸುವವರೆಗೆ ಎಲ್ಲವನ್ನೂ ನಿಭಾಯಿಸಲು ಸಿದ್ಧವಾಗಿರುತ್ತದೆ. Math ಒಂದು static object ಆಗಿರುವುದರಿಂದ, ಪ್ರತಿಯೊಂದು method ಮತ್ತು property ನೇರವಾಗಿ namespace ನಿಂದಲೇ ಲಭ್ಯವಿರುತ್ತದೆ. ನೀವು new Math().PI ಎಂದು ಬರೆಯುವ ಬದಲು Math.PI ಎಂದು ಬರೆಯುತ್ತೀರಿ. ಈ ವಿನ್ಯಾಸವು ವಿಷಯಗಳನ್ನು ಸರಳವಾಗಿಡುತ್ತದೆ, ಆದರೆ ನೀವು ಇದನ್ನು production logic ಗಾಗಿ ಅವಲಂಬಿಸುವ ಮೊದಲು ಇದರ ಕೆಲವು ಸವಾಲಿನ ಅಂಶಗಳನ್ನು (sharp edges) ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಅಗತ್ಯವಾಗಿದೆ.

Constructor ಇಲ್ಲದ ಒಂದು Static Object

ಹೆಚ್ಚಿನ built-in JavaScript objects ನೀವು ಒಂದು instance ಅನ್ನು ರಚಿಸಬೇಕೆಂದು ಬಯಸುತ್ತವೆ. ನೀವು new Date() ಅಥವಾ new Array() ಎಂದು ಕರೆಯುತ್ತೀರಿ. ಆದರೆ Math ಹಾಗೆ ಮಾಡುವುದಿಲ್ಲ. ಇದು primitive Number type ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಸಂಬಂಧಿತ functions ಮತ್ತು constants ಗಳ ಒಂದು namespace ಆಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. Math.sqrt(16) ಎಂದು ಕರೆದರೆ ನೀವು 4 ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ. new keyword ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿದರೆ engine TypeError ಅನ್ನು ಎಸೆಯುತ್ತದೆ. ಈ ಮಾದರಿಯು memory ಅನ್ನು ಸ್ವಚ್ಛವಾಗಿಡುತ್ತದೆ ಮತ್ತು Math ಕೇವಲ functional ಆಗಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. ಇದು ಇನ್‌ಪುಟ್‌ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಔಟ್‌ಪುಟ್‌ಗಳನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ಯಾವುದನ್ನೂ ಬದಲಾಯಿಸುವುದಿಲ್ಲ (mutates nothing).

ನೆನಪಿಡಬೇಕಾದ ಒಂದು ಕಟ್ಟುನಿಟ್ಟಾದ ಮಿತಿ ಇದೆ: Math ಕೇವಲ standard IEEE 754 ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಇದು BigInt ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ. Math.round() ಅಥವಾ Math.abs() ಗೆ BigInt ಅನ್ನು ನೀಡಿದರೆ ನೀವು TypeError ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ 64-bit integers ಅಥವಾ ಅದಕ್ಕಿಂತ ದೊಡ್ಡ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುತ್ತಿದ್ದರೆ, ನೀವು ಅವುಗಳನ್ನು convert ಮಾಡಬೇಕಾಗುತ್ತದೆ ಅಥವಾ native BigInt operators ಬಳಸಿ ಅರಿಥ್ಮೆಟಿಕ್ ಅನ್ನು ನಿರ್ವಹಿಸಬೇಕಾಗುತ್ತದೆ.

ನೀವು ನಿಜವಾಗಿಯೂ ಬಳಸುವ Constants

Math object ಹಲವಾರು numeric constants ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು magic numbers ಅನ್ನು hard-code ಮಾಡುವುದರಿಂದ ನಿಮ್ಮನ್ನು ಉಳಿಸುತ್ತದೆ.

  • Math.PI ಎಂಬುದು ನಮಗೆ ಪರಿಚಿತವಾದ 3.14159..., ಇದು ವೃತ್ತಗಳು (circles), ತ್ರಿಕೋನಮಿತಿ (trigonometry), ಅಥವಾ ಡಿಗ್ರಿಗಳನ್ನು ರೇಡಿಯನ್‌ಗಳಿಗೆ ಪರಿವರ್ತಿಸುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ ಅತ್ಯಗತ್ಯ.
  • Math.E ಎಂಬುದು Euler's number, ಅಂದಾಜು 2.718. ಇದು exponential growth curves, compound interest ಲೆಕ್ಕಾಚಾರಗಳು ಮತ್ತು logarithmic scales ನಲ್ಲಿ ಕಂಡುಬರುತ್ತದೆ.
  • Math.SQRT2 ಎಂಬುದು ಎರಡು‌ನ ವರ್ಗಮೂಲ (square root of two), ಅಂದಾಜು 1.414. ನಿಮಗೆ ಚೌಕದविकರ್ಣ (diagonal) ಬೇಕಾದಾಗ ಅಥವಾ ಸರಳ ರೇಖಾಗಣಿತದಲ್ಲಿ vectors ಅನ್ನು normalize ಮಾಡಬೇಕಾದಾಗ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.
  • Math.LN2 ಎಂಬುದು 2 ರ ನೈಸರ್ಗಿಕ ಲಾಗರಿಥಮ್ (natural logarithm), ಅಂದಾಜು 0.693. binary trees, information entropy, ಅಥವಾ log-base-2 ಗಣಿತವನ್ನು ಒಳಗೊಂಡಿರುವ time complexity ವಿಶ್ಲೇಷಣೆ ಮಾಡುವ ಅಲ್ಗಾರಿದಮ್‌ಗಳಲ್ಲಿ ನೀವು ಇದನ್ನು ನೋಡುವಿರಿ.

ಈ ಮೌಲ್ಯಗಳು ಸಂಪೂರ್ಣ double-precision floats ಆಗಿವೆ. ಇವು methods ಆಗಿರದೆ properties ಆಗಿರುವುದರಿಂದ, ನೀವು ಇವುಗಳನ್ನು ಪ್ಯಾರೆಂಥೆಸಿಸ್ (parentheses) ಇಲ್ಲದೆ ಬಳಸಬಹುದು.

Rounding, Signs, ಮತ್ತು Absolute Values

ಅತ್ಯಂತ ಸಾಮಾನ್ಯ Math ಕಾರ್ಯಗಳು ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ಸರಿಪಡಿಸುವುದನ್ನು (cleaning up) ಒಳಗೊಂಡಿರುತ್ತವೆ. JavaScript ನಿಮಗೆ ನಾಲ್ಕು rounding methods ಗಳನ್ನು ನೀಡುತ್ತದೆ, ಮತ್ತು ಅವುಗಳು ಒಂದೇ ರೀತಿ ವರ್ತಿಸುವುದಿಲ್ಲ, ವಿಶೇಷವಾಗಿ ನೀವು ಧನಾತ್ಮಕ (positive) ವ್ಯಾಪ್ತಿಯನ್ನು ದಾಟಿದಾಗ.

Math.abs(x) ಒಂದು ಸಂಖ್ಯೆಯपरिಮಾಣವನ್ನು (magnitude) ನೀಡುತ್ತದೆ. ಇದಕ್ಕೆ -42 ಎಂದು ನೀಡಿದರೆ ನೀವು 42 ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ. ದಿಕ್ಕಿಗಿಂತ (direction) ಹೆಚ್ಚಾಗಿ ನೀವು ದೂರದ (distance) ಬಗ್ಗೆ ಕಾಳಜಿ ವಹಿಸಿದಾಗ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ. Timestamps ಗಳನ್ನು ಹೋಲಿಸುವುದು, UI ನಲ್ಲಿ drag deltas ಗಳನ್ನು ಲೆಕ್ಕಹಾಕುವುದು ಅಥವಾ ಒಂದು ಅಂದಾಜು ತಪ್ಪು ವ್ಯಾಪ್ತಿಯಲ್ಲಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವುದು ಇವುಗಳಿಗೆ ಉದಾಹರಣೆಗಳು.

Math.round(x) ಎಂಬುದು ಸಾಮಾನ್ಯ raunder ಆಗಿದೆ. ಇದು ಹತ್ತಿರದ ಪೂರ್ಣಾಂಕವನ್ನು (integer) ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ಅರ್ಧದ ಮೌಲ್ಯಗಳನ್ನು (halves) ಮುಂದಿನ ಧನಾತ್ಮಕ ಪೂರ್ಣಾಂಕಕ್ಕೆ raund ಮಾಡುತ್ತದೆ. ಆದ್ದರಿಂದ 4.4 ಎಂಬುದು 4 ಆಗುತ್ತದೆ ಮತ್ತು 4.5 ಎಂಬುದು 5 ಆಗುತ್ತದೆ.

Math.ceil(x) ಯಾವಾಗಲೂ ಮುಂದಿನ ಪೂರ್ಣಾಂಕಕ್ಕೆ ಮೇಲ್ಮುಖವಾಗಿ (upward) raund ಮಾಡುತ್ತದೆ. 4.1 ಎಂಬುದು 5 ಆಗುತ್ತದೆ ಮತ್ತು -4.9 ಎಂಬುದು -4 ಆಗುತ್ತದೆ. ಈ ಕೊನೆಯ ಅಂಶವು ಜನರನ್ನು ಅಚ್ಚರಿಗೊಳಿಸುತ್ತದೆ. ಏಕೆಂದರೆ ಸಂಖ್ಯೆಗಳ ರೇಖೆಯ ಮೇಲೆ (number line) -4 ಎಂಬುದು -4.9 ಗಿಂತ ದೊಡ್ಡದಾಗಿರುವುದರಿಂದ, ceiling ನಕಾರಾತ್ಮಕ ಸಂಖ್ಯೆಗಳಿಗಾಗಿ ಶೂನ್ಯದ (zero) ಕಡೆಗೆ ಚಲಿಸುತ್ತದೆ.

Math.floor(x) ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿದೆ. ಇದು ಯಾವಾಗಲೂ ಕೆಳಮುಖವಾಗಿ (downward) raund ಮಾಡುತ್ತದೆ. 4.9 ಎಂಬುದು 4 ಆಗುತ್ತದೆ ಮತ್ತು -4.1 ಎಂಬುದು -5 ಆಗುತ್ತದೆ. ನೀವು search results ಗಳನ್ನು ಪೇಜಿನೇಟ್ (paginating) ಮಾಡುತ್ತಿದ್ದರೆ ಅಥವಾ ನಿಗದಿತ ಗಾತ್ರದ memory blocks ಗಳನ್ನು ಹಂಚಿಕೆ ಮಾಡುತ್ತಿದ್ದರೆ, ಸಾಮಾನ್ಯವಾಗಿ floor ನಿಮಗೆ ಬೇಕಾಗುತ್ತದೆ.

Math.trunc(x) ದಶಮಾಂಶವನ್ನು (decimal) ಸಂಪೂರ್ಣವಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ, ಕೇವಲ ಪೂರ್ಣಾಂಕದ ಭಾಗವನ್ನು ಮಾತ್ರ ಉಳಿಸುತ್ತದೆ. ಪ್ರಭಾವತವಾಗಿ, ಇದು ಚಿಹ್ನೆಯನ್ನು (sign) ಲೆಕ್ಕಿಸದೆ ಶೂನ್ಯದ ಕಡೆಗೆ ಚಲಿಸುತ್ತದೆ. 4.9 ಎಂಬುದು 4 ಆಗುತ್ತದೆ ಮತ್ತು -4.9 ಎಂಬುದು -4 ಆಗುತ್ತದೆ. ನೀವು floats ಅನ್ನು truncating ಮೂಲಕ ints ಗೆ ಪರಿವರ್ತಿಸುವ ಭಾಷೆಗಳಿಂದ ಲಾಜಿಕ್ ಅನ್ನು ಪೋರ್ಟ್ ಮಾಡುತ್ತಿದ್ದರೆ, ಇದು ನಿಮಗೆ ಸಹಕಾರಿ.

ಕೊನೆಯದಾಗಿ, Math.sign(x) ಒಂದು ಮೌಲ್ಯವು ಶೂನ್ಯದ ಯಾವ ಬದಿಯಲ್ಲಿದೆ ಎಂದು ತಿಳಿಸುತ್ತದೆ. ಇದು ಧನಾತ್ಮಕಕ್ಕೆ 1, ನಕಾರಾತ್ಮಕಕ್ಕೆ -1, positive zero ಗೆ 0, negative zero ಗೆ -0, ಮತ್ತು ಸಂಖ್ಯೆಯಲ್ಲದ ಯಾವುದಕ್ಕೂ NaN ಅನ್ನು ನೀಡುತ್ತದೆ. ಇದು if-else chain ಬರೆಯುವ ಬದಲು direction ಆಧಾರದ ಮೇಲೆ ನಿರ್ಧಾರ ತೆಗೆದುಕೊಳ್ಳಲು ಒಂದು ಸಂಕ್ಷಿಪ್ತ ಮಾರ್ಗವಾಗಿದೆ.

Random Numbers ಉತ್ಪಾದಿಸುವುದು

Math.random() ಎಂಬುದು 0 (ಸೇರಿಸಲಾಗಿದೆ) ನಿಂದ 1 (ಸೇರಿಸಲಾಗಿಲ್ಲ) ವರೆಗಿನ ಒಂದು pseudo-random float ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಇದು cryptographically secure ಅಲ್ಲ, ಆದ್ದರಿಂದ ಇದನ್ನು password generation, token creation ಅಥವಾ ಹಣಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಯಾವುದೇ ವಿಷಯಗಳಿಗಾಗಿ ಬಳಸಬೇಡಿ.