✍️ کارخانه تابع یعنی تابعی که بر اساس یک تنظیم، تابع دیگری میسازه. این الگو وقتی خوبه که یک تنظیم را بارها با ورودیهای مختلف استفاده میکنیم. به جای فرستادن نرخ تخفیف در هر بار محاسبه، یک تابع محاسبهگر میسازیم که نرخ را از محیط خودش به یاد دارد.
مثلاً فروشگاه برای یک جشنواره نرخ ثابت دارد، ولی قیمت کالاها متفاوتاند. سازنده نرخ را یک بار میگیره و تابع ساختهشده فقط قیمت را میگیره. نرخ بیست درصد به شکل 0.2 داده میشه؛ مبلغ نهایی برابر قیمت ضرب در 1 - rate است. ضرب قیمت در خود rate فقط مقدار تخفیف را میده، نه مبلغ قابل پرداخت.
در تمرین، wrapper آرایه قیمتها را دریافت میکنه و آرایه مبلغهای نهایی را برمیگردونه؛ تابع داخلی را مستقیماً خروجی نده. نرخ صفر یعنی بدون تخفیف و نرخ یک یعنی رایگان. خطای رایج، تغییر قیمتهای داخل ورودی یا گرد کردن نتیجه بدون درخواست است. اینجا ورودیها معتبرند، ترتیب باید حفظ بشه و محاسبه را بدون گرد کردن انجام میدیم.
فعالیت شما
discountedPrices(rate, prices) را بنویس. rate عدد بین 0 و 1 و prices آرایه اعداد متناهی نامنفی است. داخل تابع یک کارخانه closure برای نرخ بساز و قیمتهای نهایی price*(1-rate) را بدون گرد کردن در آرایه تازه بده؛ (0.25,[100,40]) => [75,30]، نرخ 1 => صفرها و خالی => []. ورودی تغییر نکند. تابع کمکی آماده checkDiscountedPricesUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی میکند؛ آن را تغییر نده.