إلى جانب تعريفات الدوال وتعبيرات الدوال، تمتلك JavaScript أيضًا صياغة أخرى موجزة جدًا لتعريف الدالة. وتُسمّى هذه الدوال الدوال السهمية.
إليك مقارنة بين تعريف الدالة والدالة السهمية.
function addUpTwoNumbers(num1, num2) {
return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
return num1 + num2;
};
إذا كان جسم الدالة يحتوي على عبارة return فقط، كما في المثال أعلاه، فيمكن حذف الأقواس المعقوفة {} والكلمة المفتاحية return.
وإذا كان هناك معامل واحد فقط، فيمكن حذف الأقواس الهلالية () أيضًا.
const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;
غالبًا ما تُستخدم الدوال السهمية لتعريف دوال استدعاء راجع قصيرة مباشرة داخل استدعاء الدالة.
applyToSquare(number => number * number);
تمتلك المصفوفات طرقًا مدمجة لتحليل محتوى المصفوفة.
تأخذ معظم هذه الطرق دالة تُرجع صحيحًا أو خطأ كوسيط.
وتُسمّى هذه الدالة predicate.
الغرض من هذه الطرق المدمجة هو استخدامها بدلًا من حلقة for أو الطريقة المدمجة forEach:
مثال على التحليل باستخدام حلقة for:
const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === 'two') {
return i;
}
}
// => 1
مثال على التحليل باستخدام طريقة مدمجة:
const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1
فيما يلي بعض الطرق المدمجة المفيدة الأخرى المتاحة لتحليل مصفوفة. راجع MDN للحصول على قائمة كاملة بطرق المصفوفات.
includesتحدد طريقة includes(value) ما إذا كانت المصفوفة تتضمن قيمة معيّنة.
وتُرجع true عندما تكون القيمة متضمّنة، وfalse خلاف ذلك.
const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false
everyتأخذ طريقة every(predicate) دالة تكون دالة شرطية.
وهي تختبر ما إذا كانت كل العناصر في المصفوفة تُرجع true عند تمريرها إلى الدالة الشرطية.
بعبارة أخرى: تتحقق الطريقة من أن كل عناصرها تجتاز الاختبار المُمرَّر إلى استدعاء الدالة.
وتُرجع true عندما تجتاز كل العناصر اختبار الدالة الشرطية، وfalse خلاف ذلك.
const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true
someطريقة some(predicate) هي نفسها طريقة every، لكنها تُرجع true إذا اجتاز عنصر واحد على الأقل في المصفوفة اختبار الدالة الشرطية.
const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true
findتُرجع طريقة find(predicate) قيمة أول عنصر في المصفوفة يجتاز اختبار predicate.
فحيث تُرجع some() قيمة true عند الاجتياز، تُرجع find() القيمة الفعلية في المصفوفة.
وتُرجع الطريقة undefined عندما لا يجتاز أي من عناصر المصفوفة اختبار الدالة الشرطية.
const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1
findIndexطريقة findIndex(predicate) هي نفسها طريقة find()، لكنها تُرجع الفهرس (الأول) للعنصر الذي يجتاز اختبار الدالة الشرطية بدلًا من value.
وتُرجع الطريقة -1 عندما لا يجتاز أي من عناصر المصفوفة اختبار الدالة الشرطية.
const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1
إليز، الساحرة الناشئة، تواصل تدريبها. ستُعطى عدة أكوام من البطاقات تحتاج إليها لأداء حِيَلها. ولتسهيل الأمور قليلًا، تستخدم البطاقات من 1 إلى 10 فقط.
في هذا التمرين، استخدم الطرق المدمجة لتحليل محتويات مصفوفة.
تريد إليز معرفة موضع بطاقة في الكومة (فهرسها).
const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3
تريد إليز تحديد ما إذا كانت بطاقة موجودة في الكومة، بعبارة أخرى، ما إذا كانت الكومة تحتوي على number محدد.
const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true
تريد إليز معرفة ما إذا كانت كل بطاقة زوجية، بعبارة أخرى، ما إذا كان كل number في الكومة عددًا زوجيًا.
isEachCardEven([2, 4, 6, 7]);
// => false
تريد إليز معرفة ما إذا كان في الكومة عدد فردي.
doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true
تريد إليز معرفة قيمة أول بطاقة فردية.
getFirstOddCard([4, 2, 8, 7, 9]);
// => 7
تريد إليز معرفة موضع أول بطاقة زوجية.
getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.