عبارتهای لامبدا (lambda) در جاوا ۸ – مرور سریع
اگر برنامهنویس جاوا هستید یا علاقهمندید که اطلاعات بیشتری در مورد عبارتهای لامبدا در جاوا 8 بدانید، در این نوشته با ما همراه باشید تا نگاهی به ساختار لامبدا و استفادههای آن داشته باشیم.
عبارت لامبدا در جاوا، روش فشردهای برای بیان متد یک کلاس در یک عبارت منفرد است. عبارت لامبدا یک فهرست پارامتر و یک بدنه دارد. بدنه این عبارت میتواند یک عبارت منفرد یا یک بلوک کد باشد. این عبارت معمولاً هنگامی استفاده میشود که پیادهسازی یک اینترفیس ضروری باشد. این نیاز به طور معمول زمانی رخ میدهد که یک اینترفیس به عنوان یک آرگومان برای فراخوانی یک متد لازم باشد.
برخی عبارتهای ساده لامبدا
در ادامه برخی نمونههای ساده از عبارتهای لامبدا را ارائه کردهایم.
عبارت لامبدای زیر دو عدد x و y را گرفته و مجموع آنها را محاسبه میکند:
نوع پارامتر برای نمایش خلاصهتر حذف شده است:
میتوان توابعی را تعریف کرد که پارامتری نمیپذیرند:
تابع زیر نیز معتبر است و هیچ پارامتری نپذیرفته و هیچ مقداری را نیز بازنمیگرداند:
اگر یک پارامتر وجود داشته باشد نیازی نیست، داخل پرانتز نوشته شود:
بلوکهای کد پیچیدهتر نیز وجود دارند. مثلاً عبارت لامبدای زیر یک پارامتر تکخطی میگیرد و برخی محاسبات روی آن انجام میدهد. توجه کنید که نوع پارامتر از روی فاکتورهای جانبی مشخص شده است:
کدنویسی تمیز و فشرده
با استفاده از عبارتهای لامبدا میتوان کد مرتب و فشردهای نوشت. بدین منظور کلاسهای جاوا 8 استفاده گستردهای از لامبدا داشتهاند.
ایجاد حلقه بر روی یک فهرست یا مجموعه
کلاسهای کلکسیون مانند List، Set، Queue و امثال آن اینترفیس Iterable را پیادهسازی کردهاند که ایجاد حلقه بر روی عناصر را آسانتر ساخته است.
یک فهرست نامها اعلان میکنیم:
بدون لامبدا روی عناصر آن حلقهای تعریف میکنیم:
با استفاده از لامبدا، کد حلقه فوق را میتوان چنین نوشت:
ارجاعهای متد در جاوا 8 طوری است که کد فوق را میتوان از این هم فشردهتر نوشت:
ایجاد حلقه بر روی map
یک map درواقع نگاشتی از یک مجموعه کلید به مجموعه مقادیر است. برای ایجاد حلقه بر روی یک map باید بر روی هر یک از مجموعههای (کلید، مقدار) حلقههایی داشت. در مثالهای زیر نحوه استفاده از حلقه را در این مورد میبینیم.
ابتدا یک map تعریف میکنیم:
میتوان به روش سنتی بر روی این map یک حلقه تعریف کرد:
در ادامه کد فوق را به روش سریع و فشرده با استفاده از لامبدا نوشتهایم:
اینترفیسهای کاربردی
مقدار بازگشتی یک عبارت لامبدا چیست؟ به بیان دیگر در گزاره زیر نوع X کدام است؟
مقدار بازگشتی یک عبارت لامبدا، اینترفیس کاربردی است. یعنی اینترفیسی که یک متد انتزاعی (abstract) منفرد دارد. میتوان یک عبارت لامبدا را با استفاده از متد انتزاعی مطابق خود به یک اینترفیس انتساب داد. در ادامه نمونههایی ارائه کردهایم.
ایجاد یک وظیفه چندنخی (Multi-Thread)
برای ایجاد وظیفهای که دریک نخ جداگانه اجرا میشود، باید این وظیفه را به عنوان یک اینترفیس اجرایی (Runnable) تعریف کرده و با استفاده متد ()run اجرا کنید. در اینجا Runnable یک اینترفیس کاربردی است.
سپس میتوان یک وهله از کلاس MyTask تعریف کرده و از آن برای شروع یک نخ اجرایی جدید استفاده نمود.
فرایند ایجاد یک Runnable با استفاده لامبدا بسیار آسانتر میشود. تعریف وظیفه فوق را میتوان به صورت زیر بازنویسی نمود:
و یا حتی میتوان فشردهتر نوشت:
مقایسه با استفاده از Comparator
یک Comparator در واقع اینترفیس کاربردی برای مقایسه اشیایی با نوع مفروض است. این اینترفیس یک متد مجرد منفرد به نام ()compare تعریف میکند که میتوان با استفاده از لامبدا را نیز آن را تعریف نمود.
عبارت لامبدای زیر یک Comparator ایجاد میکند که برای مقایسه رشتههایی به صوت حساس به حروف کوچک و بزرگ استفاده میشود:
زمانی که یک وهله از اینترفیس کاربردی Comparator ایجاد شد، میتوان در صورت نیاز آن را مورد استفاده مجدد قرار داد.
در ادامه یک فهرست از رشتهها را به صورت صعودی مرتب میکنیم.
فهرست فوق مرتبسازی شده است. اینک میتوانیم با استفاده از متد binarySearch() آن را مورد جستجو قرار دهیم:
محاسبه مینیمم و ماکزیمم یک فهرست نیز با استفاده از لامبدا کار آسانی است.
در ادامه برخی دادهها را تعریف کردهایم:
از عبارت لامبدا برای تعریف comparator استفاده میکنیم:
و ماکزیمم و مینیمم را چاپ میکنیم:
استفاده از لامبدا در برنامهنویسی رابط کاربری گرافیکی (GUI)
عبارتهای لامبدا در برنامهنویسی GUI نیز جهت پیادهسازی handler های رویداد بسیار مفید هستند. در ادامه نمونهی استفاده از یک handler برای کلیک دکمه را میبینید:
در این نوشته تلاش کردیم مروری سریع بر لامبدا و استفادههای آن در جاوا 8 داشته باشیم. اگر فکر میکنید استفاده از لامبدا باعث راحتتر شدن کارها شده است، لطفاً نظرات خود را در بخش زیر با ما در میان بگذارید.
اگر به این مطلب علاقهمند بودهاید، آموزشهای زیر نیز احتمالاً مورد توجه شما واقع خواهند شد:
- آموزش برنامه نویسی جاوا
- آموزش مبانی برنامه نویسی شیئ گرا در جاوا
- آموزش کار با فایل ها در جاوا با پکیج Java/IO (به همراه پروژه دفترچه یادداشت)
- گنجینه آموزش های جاوا
==
بسیار عالی متشکر