يوفّر الكائن Math
في جافا سكريبت الكثير من الدوال والقيم منتشرة الاستخدام في الحساب والرياضيات. مثلا، إن أردنا الحصول على قيمة الثابت π
(باي) الذي هو النسبة بين محيط دائرة وقطرها فيمكننا ذلك باستخدام القيمة Math.PI
.
من أكثر دوال الكائن Math
شيوعا الدالة Math.max
(والدالة المقابلة لها Math.min
)؛ فمن الشائع أن تواجه مجموعةً من الأرقام وعليك معرفة أكبر أو أصغر رقم فيها، وصحيحٌ أنَّ بإمكانك استخدام معامل رياضي في JavaScript لمعرفة الإجابة، أو عبر استعمال سلسلة من عبارات if
الشرطية، لكن هاتين الدالتين أكثر مرونةً وكفاءة.
الدالتان Math.max
وMath.min
، على النقيض من الدوال التي تكتبها بنفسك في JavaScript، مبنيتان في أساس لغة JavaScript وهما جزءٌ من الكائن الساكن (static object) الخاص بالدوال الرياضية Math
، وهو ما يعني أن بالإمكان استعمال دوال هذا الكائن في أيّ مكان من التطبيق أو المشروع دون تهيئة كائن خاص بها.
تقبل هاتان الدالتان مجموعةً من الأرقام وسائط لها، إذ تُعيد الدالة Math.max
أكبر رقم في المجموعة. جرّب مثلًا التعليمة البرمجية الآتية في console في المتصفح:
Math.max(5, 10, 11, 3, 22); > 22
ملاحظة: إذا وضعت أي نوعٍ غير رقمي من القيم فستكون النتيجة هي NaN
والذي يعني Not A Number (أي أن المدخلات أو المخرجات ليس رقمية).
لاحظ أنَّ بإمكاننا تمرير متغيرات أو خاصيات (properties) تابعة لأحد الكائنات (object) إلى الدالة Math.max
:
let orbitalPeriod = new Object();
orbitalPeriod.Mercury = 87.97,
orbitalPeriod.Venus = 224.70,
orbitalPeriod.Mars = 686.98;
Math.max(orbitalPeriod.Mercury, orbitalPeriod.Venus, orbitalPeriod.Mars)
> 686.98
أحد الأمور الذي لا تستطيع الدالة Math.max
فعلها هو العثور على أكبر قيمة في المصفوفة، وهو ما دعا في الماضي إلى استخدام حلقات التكرار ومقارنة كل القيم في ما بينها (عبر إحدى الخوارزميات المعروفة) وتخزين أكبر قيمة؛ إلا أن الأمر تغيّر مع ظهور المتصفحات الحديثة التي تدعم معيار EmacScript 6، والتي تمكّن من استعمال معامل باسم spread، وهو عبارة عن ثلاثة نقاط ...
توضع أمام المصفوفة أثناء تمريرها للدالة، مما يختصر العملية كثيرًا:
let orbitalPeriods = [87.97, 224.70, 686.98];
longestOrbit = Math.max(... orbitalPeriods);
يُعرَف التأثير الذي يُحدثه المعامل Spread على المصفوفة باسم التوزيع Expension. يُكافئ تمرير مصفوفة موّزّعة تمرير جميع عناصرها على هيئة مجموعة أرقام؛ أي أن الكتابتين أدناه متكافئتان:
Math.max(5, 10, 11, 3, 22);
Math.max(... [5, 10, 11, 3, 22]);
تُستعمل الدالة Math.max
أيضًا للاختيار بين رقمين (إما/أو)، فلو كنّا نحتاج إلى قياس عرض الشاشة فسنستعمل:
let screenWidth = Math.max(screen.width, 0);
يجب أن تكون قيمة المتغير screenWidth
النهائية رقميةً: فإما أن تساوي عرض الشاشة، أو إذا لم نستطع الحصول على تلك القيمة أو كانت غير رقمية، فالناتج 0.
الحصول على أصغر رقم في المجموعة
الدالة Math.min
تعمل عكس عمل الدالة Math.max
، فبتمرير مجموعة من القيم إليها ستُعيد الدالة Math.min
أصغرها.
Math.min(0.139, 0.15, 1);
> 0.139
تُستعمَل الدالة Math.min
عادةً لتعريف ما هي الحدود أو الشروط الدنيا، فلو كانت لدينا كرةٌ تتحرك داخل مستطيل، وكان الجانب الأيمن للمستطيل موجودًا على بعد 500 بكسل من إطار العرض، ولا نريد أن تخرج الكرة من المستطيل عند ارتطام جانبها الأيمن (ball.rigth
) بحافة المستطيل (500
)، فسنكتب:
let collide = Math.min(ball.right,500);
أحببتُ أن أنوِّه إلى إمكانية «توزيع» القيم الموجودة في مصفوفة داخل الدالة Math.min
، فلو كانت لدينا مصفوفةٌ باسم bugSizes
وأردنا معرفة أدنى قيمة فيها، فيمكننا كتابة:
Math.min(... bigSizes)
يمكننا بشكلٍ بديلٍ استخدام apply
للحصول على نفس النتيجة، وهذه الطريقة مدعومةٌ دعمًا أفضل في المتصفحات:
Math.min.apply(null, bigSizes);
يمكن استعمال apply
مع الدالة Math.max
أيضًا.
ترجمة – بتصرّف – للمقال To the Max: Using Math.min and .max لصاحبه Dudley Storey.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.