علاوه بر اعلانهای تابع و عبارتهای تابع، 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
الیس، جادوگر تازهکار، تمرینهایش را ادامه میدهد. چندین دسته کارت به او داده میشود که برای اجرای ترفندهایش به آنها نیاز دارد. برای اینکه کارها کمی آسانتر شود، او فقط از کارتهای ۱ تا ۱۰ استفاده میکند.
در این تمرین، برای تحلیل محتوای یک آرایه از متدهای داخلی استفاده کنید.
الیس میخواهد موقعیت (ایندکس) یک کارت در دسته را بداند.
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 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.