بازگرداندن مقدار از تابع با return
اهداف یادگیری
- درک تفاوت بین چاپ کردن مقدار و بازگرداندن آن
- یادگیری نحوهی استفاده از کلیدواژهی return
- فهم رفتار تابع در صورت نبود return
- آشنایی با تأثیر return در متوقف کردن اجرای تابع
مقدمه
در درس قبل، توابعی نوشتیم که با console.log مقداری را چاپ میکردند. اما در عمل، اغلب نمیخواهیم فقط یک مقدار را در Console نمایش دهیم؛ میخواهیم آن مقدار را از تابع خارج کنیم تا در جای دیگری از کد استفاده شود. این کار با کلیدواژهی return انجام میشود.
تفاوت console.log و return
برای درک بهتر این تفاوت، دو تابع زیر را مقایسه کنید:
تحلیل کد
تابع logSum فقط مقدار را روی Console نمایش میدهد؛ این مقدار جایی ذخیره نمیشود و در ادامهی کد قابل استفاده نیست. اما تابع returnSum با استفاده از return، مقدار محاسبهشده را به بیرون از تابع میفرستد؛ به همین دلیل میتوانیم آن را در متغیر result ذخیره کنیم و در ادامهی برنامه از آن استفاده کنیم.
به بیان دیگر: console.log فقط برای نمایش است، اما return باعث میشود مقدار واقعاً از تابع خارج شده و در اختیار بقیهی کد قرار بگیرد.
return اجرای تابع را متوقف میکند
نکتهی مهم دیگر این است که بهمحض رسیدن به return، تابع بلافاصله متوقف میشود و هیچ کدی بعد از آن در همان تابع اجرا نخواهد شد:
تحلیل رفتار جاوااسکریپت
در این مثال، خط console.log("این خط هرگز اجرا نمیشود") واقعاً هیچوقت اجرا نمیشود؛ چون همیشه پیش از رسیدن به آن، یکی از دو return بالا اجرا شده و تابع را کاملاً متوقف کرده است. این رفتار در بسیاری از توابع واقعی استفاده میشود تا از ادامهی اجرای غیرضروری کد جلوگیری شود.
تابع بدون return
اگر تابعی هیچ returnای نداشته باشد، یا return بدون مقدار نوشته شود، آن تابع بهطور پیشفرض undefined برمیگرداند:
function sayHi() {
console.log("سلام");
}
let result = sayHi(); // "سلام" چاپ میشود
console.log(result); // undefined
این نکته اهمیت زیادی دارد: حتی اگر تابع کاری مثل چاپ کردن انجام دهد، اگر return نداشته باشد، مقدار بازگشتی آن همیشه undefined خواهد بود.
جدول مقایسه
| ویژگی | console.log | return |
|---|---|---|
| هدف | نمایش مقدار در Console | خارج کردن مقدار از تابع |
| قابل ذخیره در متغیر | خیر | بله |
| متوقف کردن اجرای تابع | خیر | بله |
اشتباهات رایج
- تصور اینکه چاپ کردن یک مقدار با
console.logمعادل بازگرداندن آن از تابع است. - فراموش کردن
returnدر توابعی که قرار است مقدارشان در جای دیگری از کد استفاده شود، که منجر به دریافتundefinedمیشود. - نوشتن کد بعد از
returnبا این تصور که اجرا خواهد شد؛ درحالیکه چنین کدی هرگز اجرا نمیشود.
Best Practices
- وقتی هدف تابع تولید یک مقدار قابل استفاده در سایر بخشهای برنامه است، حتماً از
returnاستفاده کنید. - از
console.logفقط برای نمایش و دیباگ استفاده کنید، نه بهعنوان جایگزینی برای بازگرداندن مقدار.
ارتباط با سایر مفاهیم
درک درست return پایهی مباحث آیندهای مثل Pure Functions و Function Composition در فصل توابع پیشرفته است؛ جایی که خروجی یک تابع مستقیماً بهعنوان ورودی تابع دیگر استفاده میشود.
جمعبندی
return مقدار را از داخل تابع به بیرون بازمیگرداند و بلافاصله اجرای تابع را متوقف میکند؛ این رفتار کاملاً متفاوت از console.log است که فقط برای نمایش مقدار به کار میرود. اگر تابعی return نداشته باشد، بهطور پیشفرض undefined برمیگرداند.
