ساخت اولین توابع: پارامتر و آرگومان

اهداف یادگیری

  • یادگیری نحوه‌ی تعریف تابع در جاوااسکریپت
  • درک تفاوت پارامتر (Parameter) و آرگومان (Argument)
  • فهم مفهوم مقدار بازگشتی تابع در حد مقدماتی
  • آشنایی با رفتار تابع وقتی آرگومان کمتر یا بیشتر از پارامتر داده شود

مقدمه

تا اینجا کدهایی نوشتیم که یک‌بار اجرا می‌شدند. اما در برنامه‌نویسی واقعی، اغلب نیاز داریم یک قطعه کد را بارها، با ورودی‌های مختلف، اجرا کنیم. اینجاست که تابع (Function) وارد می‌شود. تابع یک بلوک کد قابل استفاده‌ی مجدد است که می‌توان آن را با نام صدا زد و اجرا کرد.

تعریف یک تابع ساده

function greet() {
  console.log("سلام دوست من");
}

greet(); // فراخوانی تابع
greet(); // می‌توان چندین بار صدا زد

در این مثال، function کلیدواژه‌ای است که به جاوااسکریپت می‌گوید در حال تعریف یک تابع هستیم. greet نام تابع است و () در انتها، تابع را فراخوانی (Invoke) می‌کند.

پارامتر چیست؟

اغلب تابع نیاز دارد بر اساس ورودی‌های مختلف، رفتار متفاوتی داشته باشد. برای این کار از پارامتر (Parameter) استفاده می‌کنیم؛ متغیرهایی که هنگام تعریف تابع، داخل پرانتز نوشته می‌شوند:

function greet(name) {
  console.log("سلام " + name);
}

در این مثال، name یک پارامتر است؛ یعنی یک متغیر که تابع انتظار دارد از بیرون مقدار بگیرد.

آرگومان چیست؟

وقتی تابع را فراخوانی می‌کنیم و مقداری واقعی به آن می‌دهیم، آن مقدار را آرگومان (Argument) می‌نامیم:

تفاوت پارامتر و آرگومان
خروجی کنسول اینجا نمایش داده می‌شود...

تحلیل کد

نکته‌ی مهمی که باید دقیقاً بدانید: name در تعریف تابع یک پارامتر است، اما "علی" و "سارا" در فراخوانی تابع، آرگومان هستند. به بیان ساده: پارامتر جای خالی است که در تعریف تابع مشخص می‌شود، و آرگومان مقداری است که در لحظه‌ی فراخوانی، آن جای خالی را پر می‌کند.

تابع با چند پارامتر

function sum(a, b) {
  console.log(a + b);
}

sum(3, 5); // 8
sum(10, -2); // 8

وقتی تعداد آرگومان با پارامتر مطابقت ندارد

جاوااسکریپت برخلاف بسیاری از زبان‌های دیگر، هیچ خطایی نمی‌دهد اگر تعداد آرگومان با تعداد پارامتر برابر نباشد:

آرگومان کمتر یا بیشتر از پارامتر
خروجی کنسول اینجا نمایش داده می‌شود...

تحلیل رفتار جاوااسکریپت

در حالت اول، چون آرگومانی برای b ارسال نشده، مقدار آن به‌طور خودکار undefined در نظر گرفته می‌شود؛ به همین دلیل a + b برابر NaN می‌شود (چون جمع یک عدد با undefined، مقداری غیرعددی تولید می‌کند). در حالت دوم، آرگومان سوم به‌سادگی نادیده گرفته می‌شود، چون تابع فقط دو پارامتر تعریف کرده است.

این رفتار انعطاف‌پذیر بودن جاوااسکریپت را نشان می‌دهد، اما در عین حال می‌تواند منبع خطاهای پنهان باشد اگر به آن دقت نشود.

اشتباهات رایج

  • فراموش کردن اینکه اگر آرگومانی برای یک پارامتر ارسال نشود، مقدار آن undefined خواهد بود، نه خطا.
  • خلط کردن اصطلاح پارامتر و آرگومان با یکدیگر؛ در نگارش حرفه‌ای کد و مستندات، این دو اصطلاح متفاوت هستند.

Best Practices

  • نام پارامترها را واضح و توصیفی انتخاب کنید تا کد بدون نیاز به توضیح اضافه قابل‌فهم باشد.
  • سعی کنید تعداد پارامترهای یک تابع را محدود و منطقی نگه دارید تا فراخوانی آن ساده بماند.

ارتباط با سایر مفاهیم

در درس بعدی با مقدار بازگشتی تابع (Return Value) آشنا می‌شویم که به تابع اجازه می‌دهد به‌جای فقط چاپ کردن مقدار، آن را به بیرون از خودش بازگرداند. همچنین در درس‌های بعدی، با Default Parameters و Rest Parameters روش‌های پیشرفته‌تری برای کار با پارامترها یاد خواهیم گرفت.

جمع‌بندی

تابع یک بلوک کد قابل استفاده‌ی مجدد است. پارامتر، متغیری است که در تعریف تابع مشخص می‌شود و آرگومان، مقدار واقعی است که هنگام فراخوانی به تابع داده می‌شود. جاوااسکریپت در صورت عدم تطابق تعداد آرگومان با پارامتر خطا نمی‌دهد؛ پارامترهای بدون مقدار، undefined خواهند شد.