توابع
بستهبندی کد برای استفادهٔ مجدد با توابع؛ پارامترها، مقدار بازگشتی، مقدار پیشفرض و توابع پیکانی.
آنچه در این درس میآموزید
- تابع تعریف کنید و با پارامتر و مقدار بازگشتی کار کنید
- مقدار پیشفرض برای پارامترها بگذارید
- توابع پیکانی را بنویسید و تابع را بهعنوان مقدار به کار ببرید
فهرست مطالب
تابع (Function) جعبهای نامدار از کد است: یک بار مینویسیدش، هر چند بار که خواستید صدا میزنید. تا اینجا خود ما از توابع زیاد استفاده کردهایم؛ console.log و Math.floor همگی توابعی هستند که کسی دیگر نوشته و ما فقط فراخوانیشان کردهایم. حالا نوبت ماست که تابع خودمان را بسازیم. دو مزیت اصلی دارد: کد تکراری از بین میرود و هر قطعه از برنامه یک نام روشن میگیرد.
تعریف و فراخوانی تابع
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Sara"));
console.log(greet("Amir"));Hello, Sara! Hello, Amir!
اجزای این تعریف:
- کلیدواژهٔ
functionمیگوید یک تابع تعریف میشود؛greetنام آن است. nameیک «پارامتر» (Parameter) است: متغیری که هنگام فراخوانی پر میشود. مقداری که هنگام صدا زدن میدهید — مثل"Sara"— «آرگومان» (Argument) نام دارد.returnنتیجهٔ تابع را برمیگرداند و اجرای تابع همانجا تمام میشود. تابع بدونreturnمقدارundefinedبرمیگرداند.
نکتهٔ مهم: تعریف تابع بهخودیِ خود کدی را اجرا نمیکند؛ بدنهٔ تابع فقط وقتی اجرا میشود که با () فراخوانی شود.
چند پارامتر و مقدار پیشفرض
function finalPrice(basePrice, discount = 0) {
return basePrice - basePrice * (discount / 100);
}
console.log(finalPrice(200000, 10));
console.log(finalPrice(200000));180000 200000
تابع میتواند چند پارامتر بگیرد؛ ترتیب آرگومانها به ترتیب پارامترها مینشیند. عبارت discount = 0 یعنی اگر آرگومانی برای تخفیف نفرستادید، صفر در نظر گرفته شود؛ فراخوانی دوم از همین راهرو استفاده کرد و قیمت را بیتغییر برگرداند.
توابع پیکانی
«تابع پیکانی» (Arrow Function) از سال ۲۰۱۵ به زبان اضافه شد و برای تعریفهای کوتاه رایجترین شکل است. همان تابع مربع گرفتن را در دو سبک ببینید:
const square = (n) => n * n;
const add = (a, b) => a + b;
console.log(square(6));
console.log(add(3, 4));36 7
ساختار کلی (پارامترها) => نتیجه است: وقتی بدنه فقط یک عبارت دارد، return و آکولاد حذف میشوند و نتیجهٔ همان عبارت برگردانده میشود. اگر بدنه چند خط شود، به آکولاد و return صریح نیاز دارید:
const classify = (score) => {
const label = score >= 10 ? "Pass" : "Fail";
return label;
};
console.log(classify(14));Pass
تابع بهعنوان مقدار
در جاوااسکریپت تابع یک مقدار است؛ میتوان آن را در متغیر گذاشت و — مهمتر — به تابع دیگر داد. تابعی که تابعی دیگر را بهعنوان ورودی میگیرد و روی مقدار اعمال میکند:
function applyTwice(value, fn) {
return fn(fn(value));
}
const double = (n) => n * 2;
console.log(applyTwice(3, double));12
تابع double دو بار روی ۳ اجرا شد: ۳ شد ۶ و ۶ شد ۱۲. همین ایده ساده پایهٔ بخش بزرگی از جاوااسکریپت مدرن است؛ وقتی به درس ناهمگمی برسیم، میبینید که پاسخ به رویدادها و نتایج تأخیری هم با «دادن تابع به تابع دیگر» مدیریت میشود.
تمرینها
تمرین
تمرین ۱ — تشخیص عدد زوج
تابعی به نام isEven بنویسید که یک عدد بگیرد و اگر زوج بود true و در غیر این صورت false برگرداند. سپس آن را برای ۱۰ و ۷ فراخوانی و نتیجه را چاپ کنید.
// Write your code hereنمایش راهحل
function isEven(n) {
return n % 2 === 0;
}
console.log(isEven(10));
console.log(isEven(7));true false
::: :::
خلاصه
- تابع کدِ نامدار و قابلاستفادهٔ مجدد است؛ فقط هنگام فراخوانی اجرا میشود.
- پارامتر ورودی تابع است و آرگومان مقداری که هنگام فراخوانی میدهید؛
returnنتیجه را برمیگرداند. - پارامتر میتواند مقدار پیشفرض داشته باشد تا فراخوانی بدون آن هم معنادار بماند.
- تابع پیکانی
(a, b) => a + bشکل کوتاه مدرن تعریف توابع است. - تابع در جاوااسکریپت یک مقدار است و میتواند به تابع دیگر پاس داده شود.
با متغیر، شرط، حلقه و تابع، اجزای پایهٔ منطق برنامه کامل شدهاند. در درس بعدی به جمعکردن دادهها میپردازیم: آرایهها.