آموزش لامبدا

آنچه در این صفحه می خوانید:

معرفی لامبدا (Lambda)

در برنامه نویسی رایانه، عبارات لامبدا یا تابع ناشناس (Anonymous function) تعریف تابعی است که به یک شناسه محدود نمی شود. توابع لامبدا اغلب آرگومان هایی هستند که به توابع مرتبه بالاتر منتقل می شوند یا برای ساخت نتیجه تابعی با مرتبه بالاتر استفاده می شوند که نیاز به بازگشت یک تابع دارد. اگر این تابع فقط یک بار یا به صورت محدود استفاده شود، ممکن است یک تابع لامبدا از نظر استفاده از یک تابع نامگذاری شده سبک تر باشد. توابع لامبدا در زبان های برنامه نویسی کاربردی و سایر زبان هایی که دارای توابع first-class هستند و تقریبا در همه جا مورد استفاده قرار می گیرد، جایی که آنها همان وظیفه را برای نوع تابعی انجام می دهند، همانطور که ادبیات برای سایر داده ها انجام می دهند.

توابع لامبدا توسط Alonzo Church، در سال 1936، قبل از پیدایش رایانه های الکترونیکی ایجاد شد. در چندین زبان برنامه نویسی، توابع لامبدا با استفاده از کلمه کلیدی lambda معرفی می شوند. توابع لامبدا از زمان Lisp در سال 1958 از ویژگی های زبان های برنامه نویسی بوده و تعداد زیادی از زبان های برنامه نویسی مدرن از توابع لامبدا پشتیبانی می کنند.

کاربرد لامبدا (Lambda)

از توابع لامبدا می توان برای توابعی استفاده کرد که نیازی به نامگذاری نداشته باشند و احتمالاً برای کوتاه مدت استفاده می شوند. برخی از نمونه های قابل توجه شامل closures و currying است. استفاده از توابع لامبدا موضوعی از استایل است. استفاده از آنها هرگز تنها راه حل مسئله نیست. در عوض، هر تابع لامبدا می تواند به عنوان یک تابع نامگذاری شده و با همان نام خوانده شود. برخی از برنامه نویسان از توابع لامبدا برای کپسوله کردن کد خاص و non-reusable استفاده می کنند.

در برخی از زبان های برنامه نویسی، تابع های لامبدا معمولاً برای مقاصد بسیار خاص مانند binding events برای فراخوانی های برگشتی یا فوری کردن تابع برای مقادیر خاص انجام می شوند، که ممکن است کارآمدتر، خواندنی تر و خطای کمتری نسبت به فراخوانی یک تابع با نام عمومی داشته باشد.

مثال لامبدا (Lambda)

زبان های بی شماری از توابع لامبدا پشتیبانی می کنند. مثال زیر در پایتون (Python) نوشته شده است.

پایتون از طریق lambda form از توابع ساده لامبدا پشتیبانی می کند.  اینکه بدنه اجرایی لامبدا باید یک عبارت (expression) باشد و نمی تواند یک بیانیه (statement) باشد، محدودیتی است که باعث می شود ابزار آن محدود شود. مقدار برگشتی توسط لامبدا، مقدار عبارت موجود است. فرم های لامبدا می توانند در هر مکانی که تابع های معمولی داشته باشند استفاده شوند. با این حال، این محدودیت ها آن را به یک نسخه بسیار محدود از یک تابع طبیعی تبدیل می کنند. به عنوان مثال:

>>> foo = lambda x: x * x
>>> print(foo(10))
100

به طور کلی، قرارداد پایتون استفاده از توابع نامگذاری شده را در همان محدوده تشویق می کند که ممکن است شخصاً از توابع لامبدا در سایر زبان ها استفاده کند. این قابل قبول است زیرا توابع تعریف شده لوکال قدرت کامل بسته شدن را به کار می گیرند و تقریباً به همان اندازه کاربرد لامبدا در پایتون کارآمد هستند. در این مثال می توان گفت که تابع توان داخلی ساخته شده است:

>>> def make_pow(n):
...     def fixed_exponent_pow(x):
...         return pow(x, n)
...     return fixed_exponent_pow
...
>>> sqr = make_pow(2)
>>> print (sqr(10))
100
>>> cub = make_pow(3)
>>> print (cub(10))
1000
نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود