javascriptreturnدستور return در جاوااسکریپت
return در جاوااسکریپت نتیجهٔ تابع را به محل فراخوانی برمیگرداند. تفاوت آن با چاپ خروجی و پایان زودهنگام تابع را با مثال قیمت کالا یاد بگیرید.
مفهوم به زبان ساده
تابعی که قیمت نهایی را محاسبه میکند، باید نتیجه را در اختیار بخش دیگری از برنامه بگذارد. دستور return این ارتباط را برقرار میکند: مقدار عبارت روبهروی آن، نتیجهٔ فراخوانی تابع میشود. سپس اجرای همان تابع پایان مییابد. نمایش نتیجه روی صفحه یا چاپ آن در کنسول، کاری جداست. برای شناخت ورودی تابع، #parameters-arguments را ببینید.
در مثال، totalPrice ابتدا تعداد کالا را بررسی میکند. تعداد نامعتبر با نتیجهٔ null مشخص میشود؛ این قرارداد ساده را خودمان برای نمونه انتخاب کردهایم. برای تعداد معتبر، حاصل ضرب قیمت در تعداد برمیگردد. کد بیرون تابع میتواند نتیجه را چاپ کند، در محاسبهای دیگر استفاده کند یا به رابط کاربر بدهد. از این راه، منطق قیمت به ابزار نمایش وابسته نمیشود.
اگر تابع معمولی بدون return تمام شود، نتیجهٔ آن undefined است. return بدون عبارت نیز همین مقدار را برمیگرداند. بعد از return قابل اجرا، دستورهای بعدی همان مسیر تابع اجرا نمیشوند. برای تمرین، تعداد صفر و سه را امتحان کنید و پیش از اجرا خروجی را حدس بزنید. سپس تصمیم بگیرید قرارداد تابع شما برای تعداد نامعتبر چه باشد؛ null، پیام خطا یا خطای پرتابشده، انتخابهایی با کاربرد متفاوتاند.
کجا به کار میآید؟
- برگرداندن حاصل محاسبه برای استفاده در بخش دیگری از برنامه
- پایاندادن زودهنگام یک تابع در صورت ورودی نامناسب
از تعریف تا یک مثال واقعی
function totalPrice(price, quantity) {
if (quantity < 1) return null;
return price * quantity;
}
const payable = totalPrice(80000, 2);
console.log(payable);
console.log(totalPrice(80000, 0));
console.log(payable + 20000);
160000 null 180000
این مثال چطور کار میکند؟
فراخوانی اول، قیمت ۸۰۰۰۰ و تعداد ۲ را به تابع میدهد.
شرط تعداد برقرار نیست؛ حاصل ضرب، یعنی ۱۶۰۰۰۰، برمیگردد.
در فراخوانی با تعداد صفر، return اول اجرا میشود و ضرب انجام نمیشود.
payable یک مقدار عددی است؛ میتوان آن را با هزینهٔ ارسال جمع کرد.
اشتباه رایج
عبارت نتیجه را بیدلیل به خط بعد از return نبرید؛ جاوااسکریپت ممکن است همانجا سمیکالن درج کند و تابع undefined برگرداند. console.log هم جای return را نمیگیرد.
این را به خاطر بسپارید
return نتیجهٔ تابع را تحویل میدهد و اجرای همان تابع را پایان میدهد؛ چاپکردن فقط نمایش است.