برنتی / می‌نویسم که فکر کنم

تفاوت اجرای Lazy و Eager

1401.02.16·Functional Programming

در این مطلب به شرح شیوه پیاده‌سازی و مقایسه‌ی اجرای lazy و eager برای تابعی مانند heavyCalculation که محاسبات سنگینی را انجام می‌دهد، می‌پردازیم.

پیاده‌سازی Eager Execution

function eager(data){
	const result = heavyCalculation(data);
	return function next() {
		return result;
		}
}

const calc = eager({...});
...
calc();

مزیت اجرای Eager در این است که محاسبات سنگین فقط یکبار زمان تعریف تابع calc انجام می‌شود و به عبارتی با کش کردن result مانع از انجام محاسبات سنگین زمان فراخوانی calc می‌شود. 

پیاده‌سازی Lazy Execution

function lazy(data){
	return function next() {
		return heavyCalculation(data);
		}
}

const calc = lazy({...});
...
calc();

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

نکته مثبت اجرای Lazy برای حالاتی هست که اجرای متد calc وابسته به شرایطی باشد که امکان دارد هنگام اجرا متد calc فراخوانی نشود و بدین ترتیب هیچگاه عملیات سنگین اجرا نمی‌شود. در صورتی که در حالت eager در زمان تعریف calc تحت هر شرایطی یکبار متد heavyCalculation اجرا خواهد شد.

§ فهرست « Functional Programming »
  1. 1401.02.16تفاوت اجرای Lazy و Eagerمقایسه‌ی اجرای Lazy و Eager
  2. 1401.02.15مفهوم point-free و Equational Reasoning چیست؟
  3. 1401.02.15آداپتور flip و reverse و spreadArgs
  4. 1401.02.15آداپتورها
  5. 1401.02.15تابع unary و binary و ternary و n-ary چیست؟
  6. 1399.07.01برنامه‌نویسی فانکشنال در جاوااسکریپت - قسمت ۲"در این مطلب به شرح مفاهیم پایه برنامه نویسی فانکشنال بصورت خلاصه می‌پردازیم.
  7. 1399.06.18برنامه‌نویسی فانکشنال در جاوااسکریپت - قسمت ۱ Pure Functionsیک تابع Pure تابعی است که به ازای هر ورودی یکسان یک خروجی برگرداند و side effects یا اثرات جانبی هم نداشته باشد.