جاوااسکریپتمقدماتی۵ دقیقه مطالعهECMAScript 2023+

توابع

بسته‌بندی کد برای استفادهٔ مجدد با توابع؛ پارامترها، مقدار بازگشتی، مقدار پیش‌فرض و توابع پیکانی.

آنچه در این درس می‌آموزید

  • تابع تعریف کنید و با پارامتر و مقدار بازگشتی کار کنید
  • مقدار پیش‌فرض برای پارامترها بگذارید
  • توابع پیکانی را بنویسید و تابع را به‌عنوان مقدار به کار ببرید
نویسنده: تیم داکنامه · بازبینی: ۲۰۲۶-۱۰-۳۰
فهرست مطالب

تابع (Function) جعبه‌ای نام‌دار از کد است: یک بار می‌نویسیدش، هر چند بار که خواستید صدا می‌زنید. تا اینجا خود ما از توابع زیاد استفاده کرده‌ایم؛ console.log و Math.floor همگی توابعی هستند که کسی دیگر نوشته و ما فقط فراخوانی‌شان کرده‌ایم. حالا نوبت ماست که تابع خودمان را بسازیم. دو مزیت اصلی دارد: کد تکراری از بین می‌رود و هر قطعه از برنامه یک نام روشن می‌گیرد.

تعریف و فراخوانی تابع

greet.js
function greet(name) {
  return `Hello, ${name}!`;
}

console.log(greet("Sara"));
console.log(greet("Amir"));
خروجی کد

Hello, Sara! Hello, Amir!

اجزای این تعریف:

  1. کلیدواژهٔ function می‌گوید یک تابع تعریف می‌شود؛ greet نام آن است.
  2. name یک «پارامتر» (Parameter) است: متغیری که هنگام فراخوانی پر می‌شود. مقداری که هنگام صدا زدن می‌دهید — مثل "Sara" — «آرگومان» (Argument) نام دارد.
  3. return نتیجهٔ تابع را برمی‌گرداند و اجرای تابع همان‌جا تمام می‌شود. تابع بدون return مقدار undefined برمی‌گرداند.

نکتهٔ مهم: تعریف تابع به‌خودیِ خود کدی را اجرا نمی‌کند؛ بدنهٔ تابع فقط وقتی اجرا می‌شود که با () فراخوانی شود.

چند پارامتر و مقدار پیش‌فرض

price.js
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) از سال ۲۰۱۵ به زبان اضافه شد و برای تعریف‌های کوتاه رایج‌ترین شکل است. همان تابع مربع گرفتن را در دو سبک ببینید:

arrow.js
const square = (n) => n * n;
const add = (a, b) => a + b;

console.log(square(6));
console.log(add(3, 4));
خروجی کد

36 7

ساختار کلی (پارامترها) => نتیجه است: وقتی بدنه فقط یک عبارت دارد، return و آکولاد حذف می‌شوند و نتیجهٔ همان عبارت برگردانده می‌شود. اگر بدنه چند خط شود، به آکولاد و return صریح نیاز دارید:

arrow-block.js
const classify = (score) => {
  const label = score >= 10 ? "Pass" : "Fail";
  return label;
};

console.log(classify(14));
خروجی کد

Pass

تابع به‌عنوان مقدار

در جاوااسکریپت تابع یک مقدار است؛ می‌توان آن را در متغیر گذاشت و — مهم‌تر — به تابع دیگر داد. تابعی که تابعی دیگر را به‌عنوان ورودی می‌گیرد و روی مقدار اعمال می‌کند:

apply.js
function applyTwice(value, fn) {
  return fn(fn(value));
}

const double = (n) => n * 2;

console.log(applyTwice(3, double));
خروجی کد

12

تابع double دو بار روی ۳ اجرا شد: ۳ شد ۶ و ۶ شد ۱۲. همین ایده ساده پایهٔ بخش بزرگی از جاوااسکریپت مدرن است؛ وقتی به درس ناهمگمی برسیم، می‌بینید که پاسخ به رویدادها و نتایج تأخیری هم با «دادن تابع به تابع دیگر» مدیریت می‌شود.

تمرین‌ها

تمرین

تمرین ۱ — تشخیص عدد زوج

تابعی به نام isEven بنویسید که یک عدد بگیرد و اگر زوج بود true و در غیر این صورت false برگرداند. سپس آن را برای ۱۰ و ۷ فراخوانی و نتیجه را چاپ کنید.

js
// Write your code here
نمایش راه‌حل
js
function isEven(n) {
  return n % 2 === 0;
}

console.log(isEven(10));
console.log(isEven(7));
خروجی کد

true false

::: :::

خلاصه

  • تابع کدِ نام‌دار و قابل‌استفادهٔ مجدد است؛ فقط هنگام فراخوانی اجرا می‌شود.
  • پارامتر ورودی تابع است و آرگومان مقداری که هنگام فراخوانی می‌دهید؛ return نتیجه را برمی‌گرداند.
  • پارامتر می‌تواند مقدار پیش‌فرض داشته باشد تا فراخوانی بدون آن هم معنادار بماند.
  • تابع پیکانی (a, b) => a + b شکل کوتاه مدرن تعریف توابع است.
  • تابع در جاوااسکریپت یک مقدار است و می‌تواند به تابع دیگر پاس داده شود.

با متغیر، شرط، حلقه و تابع، اجزای پایهٔ منطق برنامه کامل شده‌اند. در درس بعدی به جمع‌کردن داده‌ها می‌پردازیم: آرایه‌ها.

منابع و ارجاع‌ها

درس‌های مرتبط