كائن Math في JavaScript: التقريب، القوى، الجذور، والأرقام العشوائية
العمليات الحسابية في JavaScript لا تتوقف عند + و-.
كائن Math يعطيك أدوات جاهزة للتقريب، المقارنة، الجذور، والقيم العشوائية.
هذا الدرس أساسي في كثير من المشاريع: حساب أسعار، ألعاب، إحصائيات، وتوليد قيم ديناميكية.
قاعدة مهمة
Math كائن مدمج في JavaScript، ولا تحتاج إلى new لإنشائه.
console.log(Math.PI); // 3.141592...
ماذا يفعل هذا الكود؟ يطبع قيمة ثابتة جاهزة من كائن Math.
النتيجة المتوقعة: الحصول على قيمة pi لاستخدامها في الحسابات الهندسية.
خطأ شائع: محاولة كتابة new Math() وهي غير صحيحة.
1) التقريب: round و floor و ceil
console.log(Math.round(4.5)); // 5
console.log(Math.floor(4.9)); // 4
console.log(Math.ceil(4.1)); // 5
ماذا يفعل هذا الكود؟ يوضح 3 طرق مختلفة للتقريب.
النتيجة المتوقعة: اختيار نوع التقريب حسب الحاجة العملية.
خطأ شائع: استخدام round عندما تريد دائماً النزول للأسفل (يجب استخدام floor).
2) max و min لاختيار أكبر/أصغر قيمة
console.log(Math.max(10, 25, 7)); // 25
console.log(Math.min(10, 25, 7)); // 7
ماذا يفعل هذا الكود؟ يبحث عن أكبر وأصغر قيمة بسرعة.
النتيجة المتوقعة: مفيد في تحليل النتائج أو الأسعار.
خطأ شائع: تمرير مصفوفة مباشرة بدون spread في بعض الحالات.
3) القوى والجذور: pow و sqrt
console.log(Math.pow(2, 3)); // 8
console.log(Math.sqrt(49)); // 7
ماذا يفعل هذا الكود؟ يحسب الأس والجذر التربيعي.
النتيجة المتوقعة: تقليل تعقيد كتابة المعادلات يدوياً.
خطأ شائع: الخلط بين pow(a, b) وبين الضرب العادي.
4) القيم العشوائية: Math.random()
const r = Math.random();
console.log(r); // رقم بين 0 و أقل من 1
ماذا يفعل هذا الكود؟ يولد قيمة عشوائية عشرية.
النتيجة المتوقعة: قيمة مختلفة غالباً في كل تشغيل.
خطأ شائع: توقع أن تعيد random() أرقاماً صحيحة مباشرة.
5) رقم عشوائي صحيح بين حدين (مهم جداً)
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randomInt(1, 10));
ماذا يفعل هذا الكود؟ يولد رقماً صحيحاً داخل النطاق min..max (شاملاً الطرفين).
النتيجة المتوقعة: مناسب للألعاب والسحب العشوائي.
خطأ شائع: نسيان +1 في المعادلة، فيستبعد القيمة العليا.
مثال واقعي: تقريب السعر للعرض
const price = 19.678;
const shownPrice = Math.round(price * 100) / 100;
console.log(shownPrice); // 19.68
ماذا يفعل هذا الكود؟ يقرب السعر إلى منزلتين عشريتين للعرض.
النتيجة المتوقعة: قيمة أوضح في واجهات المتاجر.
خطأ شائع: عرض أرقام طويلة غير مريحة للمستخدم.
Story قصيرة: لعبة لا تعطي الرقم 10
مطور بنى لعبة تخمين من 1 إلى 10.
استخدم Math.floor(Math.random() * 10) + 1 بشكل صحيح.
قبل ذلك كان يستعمل صيغة خاطئة تستبعد 10، فاشتكى المستخدمون أن الرقم الأخير لا يظهر.
جدول سريع لأهم أدوات Math
| الدالة | وظيفتها | مثال |
|---|---|---|
Math.round() |
تقريب للأقرب | Math.round(3.6) // 4 |
Math.floor() |
تقريب للأسفل | Math.floor(3.9) // 3 |
Math.ceil() |
تقريب للأعلى | Math.ceil(3.1) // 4 |
Math.max() |
أكبر قيمة | Math.max(4, 9, 2) // 9 |
Math.min() |
أصغر قيمة | Math.min(4, 9, 2) // 2 |
Math.random() |
عدد عشوائي عشري | 0 <= n < 1 |
Checklist سريعة
- أعرف متى أستخدم
roundوfloorوceil. - أستطيع توليد رقم عشوائي صحيح بين حدين.
- أستخدم
maxوminلاستخراج القيم القصوى بسرعة. - أفهم أن Math كائن جاهز ولا يحتاج إنشاء.
الأسئلة الشائعة — FAQ
ما الفرق بين Math.round و Math.floor و Math.ceil؟
round للأقرب، floor للأسفل دائماً، ceil للأعلى دائماً.
كيف أكتب random بين 1 و 10؟
استخدم: Math.floor(Math.random() * 10) + 1.
هل Math يحتاج new؟
لا، استخدمه مباشرة ككائن مدمج.