جلسه ۷ - اعداد- عملیات پایه و شیء Math

بخش ۵: اعداد: عملیات پایه و شیء Math (Numbers: Basic Operations and Math Object)

اعداد از پایه‌ای‌ترین انواع داده در جاوااسکریپت هستند. درک عمیق نحوه کار با اعداد و شیء Math برای انجام محاسبات پیچیده ضروری است.

مفاهیم کلیدی:

۱. انواع اعداد در جاوااسکریپت:

  • اعداد صحیح (Integer): 42
  • اعداد اعشاری (Float): 3.14
  • نماد علمی (Scientific): 1.2e3 (برابر با 1200)
  • مقادیر خاص: Infinity, -Infinity, NaN
let integer = 42;
let float = 3.14;
let scientific = 1.2e3;
let infinity = 5 / 0;
let notANumber = "abc" / 2;
 
console.log(scientific); // 1200
console.log(infinity);   // Infinity
console.log(notANumber); // NaN

۲. متدهای مهم اعداد:

let num = 3.14159;
 
// تبدیل به رشته با اعشار مشخص
console.log(num.toFixed(2)); // "3.14"
 
// تبدیل به رشته در مبنای مختلف
console.log((255).toString(16)); // "ff"
 
// بررسی NaN
console.log(isNaN("abc")); // true
console.log(Number.isNaN("abc")); // false (متد جدیدتر)
 
// تبدیل رشته به عدد
console.log(parseInt("123abc")); // 123
console.log(parseFloat("3.14abc")); // 3.14

۳. شیء Math برای عملیات پیشرفته:

// ثابت‌های ریاضی
console.log(Math.PI); // 3.141592653589793
console.log(Math.E);  // 2.718281828459045
 
// متدهای گرد‌کردن
console.log(Math.round(4.7));  // 5
console.log(Math.floor(4.7));  // 4
console.log(Math.ceil(4.2));   // 5
 
// متدهای محاسباتی
console.log(Math.max(1, 5, 10)); // 10
console.log(Math.min(1, 5, 10)); // 1
console.log(Math.sqrt(16));     // 4
console.log(Math.pow(2, 3));    // 8
 
// اعداد تصادفی
console.log(Math.random()); // عددی بین 0 تا 1

۴. تولید عدد تصادفی در بازه مشخص:

// تولید عدد تصادفی بین min و max (شامل خود min و max)
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
 
console.log(getRandomInt(1, 10)); // عددی بین 1 تا 10

۵. مشکل دقت در اعداد اعشاری:

console.log(0.1 + 0.2); // 0.30000000000000004
 
// راه حل: استفاده از toFixed
let result = (0.1 + 0.2).toFixed(2);
console.log(result); // "0.30"

ارزیابی بخش ۵:

سؤال ۱: پیش‌بینی خروجی خروجی هر خط از کد زیر چیست؟

console.log((3.14159).toFixed(3));
console.log(parseInt("100px"));
console.log(Math.floor(7.8));
console.log(Math.ceil(7.2));
console.log(Math.max(2, 8, 5));
console.log(Math.pow(3, 2));
console.log(0.1 + 0.2 === 0.3);

سؤال ۲: نوشتن تابع کاربردی تابعی بنویسید که شعاع یک دایره را دریافت کند و مساحت آن را محاسبه و برگرداند.

سؤال ۳: تولید عدد تصادفی تابعی بنویسید که دو عدد min و max را دریافت کند و یک عدد تصادفی صحیح بین آن دو (شامل خود min و max) برگرداند.

پاسخ‌های شما:

  1. خروجی کد: 3.142, 100, 7, 8, 8, 9, false
  2. تابع مساحت دایره: function area(radix) { return radix * radix * 3.14; }
  3. تابع عدد تصادفی: function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }

بازخورد و تحلیل پاسخ‌های شما:

سؤال ۱: پیش‌بینی خروجی (کاملاً صحیح ✅)

console.log((3.14159).toFixed(3)); // ✅ 3.142 (صحیح - گرد شده)
console.log(parseInt("100px"));    // ✅ 100 (صحیح)
console.log(Math.floor(7.8));      // ✅ 7 (صحیح)
console.log(Math.ceil(7.2));       // ✅ 8 (صحیح)
console.log(Math.max(2, 8, 5));    // ✅ 8 (صحیح)
console.log(Math.pow(3, 2));       // ✅ 9 (صحیح)
console.log(0.1 + 0.2 === 0.3);    // ✅ false (صحیح - به دلیل مشکل دقت اعشاری)

پاسخ‌های شما کاملاً درست است! شما مشکل دقت اعداد اعشاری در جاوااسکریپت را به خوبی درک کرده‌اید.


سؤال ۲: تابع مساحت دایره (نیاز به بهبود 🔍)

کد شما از نظر منطقی درست کار می‌کند، اما می‌تواند حرفه‌ای‌تر شود:

// نسخه بهبود یافته:
function calculateCircleArea(radius) {
    return Math.PI * Math.pow(radius, 2);
}
 
// یا به صورت ساده‌تر:
function calculateCircleArea(radius) {
    return Math.PI * radius * radius;
}
 
console.log(calculateCircleArea(5)); // 78.53981633974483

مقایسه با کد شما:

  • استفاده از Math.PI به جای 3.14 برای دقت بیشتر
  • نام پارامتر radius به جای radix (که معمولاً برای مبنا استفاده می‌شود)
  • استفاده از Math.pow() یا عملگر توان ** برای خوانایی بهتر

سؤال ۳: تابع عدد تصادفی (کاملاً صحیح ✅)

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
 
console.log(getRandomInt(1, 10)); // ✅ عددی تصادفی بین 1 تا 10

این تابع کاملاً درست و بهینه نوشته شده است! فرمول شما استاندارد است و بازه min و max را به درستی پوشش می‌دهد.


جمع‌بندی نهایی بخش ۵:

شما مفاهیم اصلی کار با اعداد و شیء Math را به خوبی فرا گرفته‌اید:

  • ✅ درک متدهای مختلف اعداد (toFixed, parseInt, etc.)
  • ✅ تسلط بر شیء Math و متدهای آن
  • ✅ آگاهی از مشکل دقت اعداد اعشاری
  • ✅ توانایی نوشتن توابع ریاضی کاربردی

نکات مهم برای توسعه‌دهنده ارشد:

  • همیشه از Math.PI به جای مقدار ثابت پی استفاده کنید
  • برای محاسبات مالی از کتابخانه‌های خاص (مانند decimal.js) استفاده کنید
  • از Number.isNaN() به جای isNaN() استفاده کنید (امن‌تر است)

آیا این توضیحات شفاف بود و آماده حرکت به بخش بعدی هستید؟

بخش بعدی: “منطق بولین: مقادیر Truthy و Falsy” - یکی از مهم‌ترین مفاهیم در کنترل جریان برنامه!