بازگرداندن مقدار از تابع با return

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

  • درک تفاوت بین چاپ کردن مقدار و بازگرداندن آن
  • یادگیری نحوه‌ی استفاده از کلیدواژه‌ی return
  • فهم رفتار تابع در صورت نبود return
  • آشنایی با تأثیر return در متوقف کردن اجرای تابع

مقدمه

در درس قبل، توابعی نوشتیم که با console.log مقداری را چاپ می‌کردند. اما در عمل، اغلب نمی‌خواهیم فقط یک مقدار را در Console نمایش دهیم؛ می‌خواهیم آن مقدار را از تابع خارج کنیم تا در جای دیگری از کد استفاده شود. این کار با کلیدواژه‌ی return انجام می‌شود.

تفاوت console.log و return

برای درک بهتر این تفاوت، دو تابع زیر را مقایسه کنید:

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

تحلیل کد

تابع logSum فقط مقدار را روی Console نمایش می‌دهد؛ این مقدار جایی ذخیره نمی‌شود و در ادامه‌ی کد قابل استفاده نیست. اما تابع returnSum با استفاده از return، مقدار محاسبه‌شده را به بیرون از تابع می‌فرستد؛ به همین دلیل می‌توانیم آن را در متغیر result ذخیره کنیم و در ادامه‌ی برنامه از آن استفاده کنیم.

به بیان دیگر: console.log فقط برای نمایش است، اما return باعث می‌شود مقدار واقعاً از تابع خارج شده و در اختیار بقیه‌ی کد قرار بگیرد.

return اجرای تابع را متوقف می‌کند

نکته‌ی مهم دیگر این است که به‌محض رسیدن به return، تابع بلافاصله متوقف می‌شود و هیچ کدی بعد از آن در همان تابع اجرا نخواهد شد:

return اجرای تابع را متوقف می‌کند
خروجی کنسول اینجا نمایش داده می‌شود...

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

در این مثال، خط console.log("این خط هرگز اجرا نمی‌شود") واقعاً هیچ‌وقت اجرا نمی‌شود؛ چون همیشه پیش از رسیدن به آن، یکی از دو return بالا اجرا شده و تابع را کاملاً متوقف کرده است. این رفتار در بسیاری از توابع واقعی استفاده می‌شود تا از ادامه‌ی اجرای غیرضروری کد جلوگیری شود.

تابع بدون return

اگر تابعی هیچ returnای نداشته باشد، یا return بدون مقدار نوشته شود، آن تابع به‌طور پیش‌فرض undefined برمی‌گرداند:

function sayHi() {
  console.log("سلام");
}

let result = sayHi(); // "سلام" چاپ می‌شود
console.log(result);  // undefined

این نکته اهمیت زیادی دارد: حتی اگر تابع کاری مثل چاپ کردن انجام دهد، اگر return نداشته باشد، مقدار بازگشتی آن همیشه undefined خواهد بود.

جدول مقایسه

ویژگیconsole.logreturn
هدفنمایش مقدار در Consoleخارج کردن مقدار از تابع
قابل ذخیره در متغیرخیربله
متوقف کردن اجرای تابعخیربله

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

  • تصور اینکه چاپ کردن یک مقدار با console.log معادل بازگرداندن آن از تابع است.
  • فراموش کردن return در توابعی که قرار است مقدارشان در جای دیگری از کد استفاده شود، که منجر به دریافت undefined می‌شود.
  • نوشتن کد بعد از return با این تصور که اجرا خواهد شد؛ درحالی‌که چنین کدی هرگز اجرا نمی‌شود.

Best Practices

  • وقتی هدف تابع تولید یک مقدار قابل استفاده در سایر بخش‌های برنامه است، حتماً از return استفاده کنید.
  • از console.log فقط برای نمایش و دیباگ استفاده کنید، نه به‌عنوان جایگزینی برای بازگرداندن مقدار.

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

درک درست return پایه‌ی مباحث آینده‌ای مثل Pure Functions و Function Composition در فصل توابع پیشرفته است؛ جایی که خروجی یک تابع مستقیماً به‌عنوان ورودی تابع دیگر استفاده می‌شود.

جمع‌بندی

return مقدار را از داخل تابع به بیرون بازمی‌گرداند و بلافاصله اجرای تابع را متوقف می‌کند؛ این رفتار کاملاً متفاوت از console.log است که فقط برای نمایش مقدار به کار می‌رود. اگر تابعی return نداشته باشد، به‌طور پیش‌فرض undefined برمی‌گرداند.