نکات کلیدی
1. عبارات لامبدا برنامهنویسی جاوا را با کد مختصر و به سبک تابعی متحول میکنند
عبارات لامبدا به طرز فریبندهای مختصر هستند و به راحتی میتوان آنها را بهطور بیدقتی در کد تکرار کرد.
نحو مختصر: عبارات لامبدا به توسعهدهندگان اجازه میدهند کدی بیانگرتر و خواناتر در جاوا بنویسند. آنها روشی برای ارسال رفتار به عنوان یک آرگومان به متدها فراهم میکنند و پارادایمهای برنامهنویسی تابعی را ممکن میسازند.
خوانایی بهبود یافته: با کاهش کدهای تکراری، عبارات لامبدا فهمیدن نیت کد را در یک نگاه آسانتر میکنند. این بهویژه برای عملیات روی مجموعهها، مدیریت رویدادها و پیادهسازیهای بازگشتی مفید است.
برنامهنویسی تابعی در جاوا: عبارات لامبدا سبک برنامهنویسی تابعیتری را تسهیل میکنند و به عدم تغییرپذیری و توابع بدون اثر جانبی تشویق میکنند. این منجر به کدی میشود که فهمیدن، آزمایش و نگهداری آن آسانتر است.
2. رابطهای تابعی یکپارچگی بیدردسر عبارات لامبدا را ممکن میسازند
یک رابط تابعی، رابطی با یک متد انتزاعی - پیادهسازی نشده - است.
متد انتزاعی واحد: رابطهای تابعی پایهای برای عبارات لامبدا در جاوا هستند. آنها یک متد انتزاعی واحد تعریف میکنند که به آنها اجازه میدهد با نحو لامبدا پیادهسازی شوند.
رابطهای تابعی داخلی: جاوا 8 چندین رابط تابعی داخلی در بسته java.util.function معرفی میکند، مانند:
- Predicate<T>: نمایانگر یک تابع با مقدار بولی از یک آرگومان
- Function<T,R>: نمایانگر یک تابع که یک آرگومان میپذیرد و نتیجهای تولید میکند
- Consumer<T>: نمایانگر یک عملیات که یک آرگومان ورودی میپذیرد و نتیجهای برنمیگرداند
- Supplier<T>: نمایانگر یک تأمینکننده نتایج
رابطهای تابعی سفارشی: توسعهدهندگان میتوانند رابطهای تابعی خود را برای نیازهای خاص ایجاد کنند و استفاده از عبارات لامبدا را در زمینههای خاص دامنه ممکن سازند.
3. جریانها قابلیتهای پردازش داده قدرتمندی با ارزیابی تنبل ارائه میدهند
جریانها دو نوع متد دارند: میانی و نهایی که با هم کار میکنند.
پردازش داده اعلامی: جریانها به توسعهدهندگان اجازه میدهند عملیات پردازش داده پیچیده را به صورت اعلامی بیان کنند. این منجر به کدی خواناتر و قابل نگهداریتر نسبت به رویکردهای دستوری میشود.
ارزیابی تنبل: عملیات جریان به صورت تنبل ارزیابی میشوند، به این معنی که محاسبه روی دادهها تنها زمانی انجام میشود که لازم باشد. این میتواند به بهبودهای عملکردی قابل توجهی منجر شود، بهویژه هنگام کار با مجموعههای داده بزرگ.
ترکیب عملیات: جریانها از یک API روان برای ترکیب چندین عملیات پشتیبانی میکنند:
- filter(): انتخاب عناصر بر اساس یک گزاره
- map(): تبدیل عناصر
- reduce(): ترکیب عناصر برای تولید یک نتیجه واحد
- collect(): جمعآوری عناصر به یک مجموعه یا ساختار داده دیگر
4. ارجاعات متد یک نحو کوتاه برای عبارات لامبدا ارائه میدهند
ارجاعات متد میتوانند به متدهای استاتیک و متدهایی که پارامتر میپذیرند نیز اشاره کنند.
جایگزین مختصر: ارجاعات متد راهی فشردهتر برای نوشتن عبارات لامبدا فراهم میکنند زمانی که لامبدا به سادگی یک متد موجود را فراخوانی میکند.
انواع ارجاعات متد:
- ارجاع متد استاتیک: ClassName::staticMethodName
- ارجاع متد نمونه از یک شیء خاص: objectReference::instanceMethodName
- ارجاع متد نمونه از یک شیء دلخواه از یک نوع خاص: ClassName::instanceMethodName
- ارجاع سازنده: ClassName::new
خوانایی بهبود یافته: در بسیاری از موارد، ارجاعات متد میتوانند کد را خواناتر کنند با نشان دادن واضح نیت استفاده از یک متد موجود به جای تعریف رفتار جدید.
5. API مجموعهها با عملیات به سبک تابعی بهبود یافته است
ما میتوانیم به راحتی مسنترین فرد را در لیست پیدا کنیم.
عملیات جریان روی مجموعهها: API مجموعهها اکنون شامل متدهایی برای بهدست آوردن جریانها است، که امکان عملیات پردازش داده قدرتمند را بهطور مستقیم روی اشیاء مجموعه فراهم میکند.
عملیات به سبک تابعی: متدهای جدیدی به رابطهای مجموعه اضافه شدهاند تا از عملیات به سبک تابعی پشتیبانی کنند:
- forEach(): انجام یک عمل برای هر عنصر
- removeIf(): حذف تمام عناصری که با یک گزاره مطابقت دارند
- replaceAll(): جایگزینی هر عنصر با نتیجه اعمال یک تابع
عملکرد بهبود یافته: بسیاری از این عملیات میتوانند کارآمدتر از همتایان دستوری خود باشند، بهویژه هنگام کار با مجموعههای بزرگ یا زمانی که موازیسازی مطلوب است.
6. مفاهیم برنامهنویسی تابعی کیفیت و نگهداری کد را بهبود میبخشند
ما اکنون میتوانیم همان را با کد بسیار کمتری بهدست آوریم.
عدم تغییرپذیری: برنامهنویسی تابعی استفاده از ساختارهای داده غیرقابل تغییر را تشویق میکند، که خطر اثرات جانبی را کاهش میدهد و کد را آسانتر برای فهمیدن و اشکالزدایی میکند.
توابع مرتبه بالاتر: توانایی ارسال توابع به عنوان آرگومان و بازگرداندن آنها به عنوان نتایج، انتزاعات قدرتمند و استفاده مجدد از کد را ممکن میسازد.
توابع خالص: تأکید بر توابع بدون اثرات جانبی منجر به کدی پیشبینیپذیرتر و قابل آزمایشتر میشود.
مزایا:
- پردازش موازی آسانتر
- سازماندهی کد بهبود یافته
- کاهش پیچیدگی
- قابلیت آزمایش بهبود یافته
7. الگوهای طراحی با عبارات لامبدا سادهتر و بیانگرتر میشوند
ما اکنون میتوانیم این الگو را با تلاش کمتری در جاوا پیادهسازی کنیم.
پیادهسازیهای سادهشده: بسیاری از الگوهای طراحی سنتی میتوانند با استفاده از عبارات لامبدا و رابطهای تابعی بهطور مختصرتر پیادهسازی شوند.
نمونههایی از الگوهای سادهشده:
- الگوی استراتژی: ارسال رفتارهای مختلف به عنوان عبارات لامبدا
- الگوی ناظر: استفاده از رابطهای تابعی برای شنوندگان رویداد
- الگوی دکوراتور: ترکیب رفتارها با استفاده از عبارات لامبدا
- الگوی متد قالب: ارسال رفتار قابل تنظیم به عنوان آرگومانهای متد
انعطافپذیری بهبود یافته: رویکرد تابعی اغلب منجر به طراحیهای انعطافپذیرتر و قابل ترکیبتر نسبت به پیادهسازیهای سنتی شیءگرا میشود.
8. مدیریت منابع با تکنیکهای تابعی کارآمدتر میشود
ما اکنون میتوانیم از یک نحو سبک در جاوا با عبارات لامبدا لذت ببریم.
تلاش با منابع: جاوا 7 بیانیه تلاش با منابع را برای مدیریت خودکار منابع معرفی کرد. جاوا 8 این را با عبارات لامبدا بهبود میبخشد.
مدیریت منابع تابعی: عبارات لامبدا الگوهای مدیریت منابع انعطافپذیرتر و مختصرتر را ممکن میسازند:
- مقداردهی اولیه تأخیری
- ارزیابی تنبل منابع
- استراتژیهای مدیریت منابع سفارشی
مزایا:
- کاهش کد تکراری
- بهبود پاکسازی منابع
- مدیریت خطا بیانگرتر
9. بازگشت و یادآوری با رویکردهای تابعی بهینهسازی میشوند
یادآوری یک تکنیک ساده اما هوشمندانه برای سریعتر کردن محاسبات بازگشتی همپوشان است.
بهینهسازی فراخوانی دنبالهدار: در حالی که جاوا از بهینهسازی خودکار فراخوانی دنبالهدار پشتیبانی نمیکند، تکنیکهای تابعی میتوانند برای پیادهسازی دستی آن استفاده شوند، که امکان الگوریتمهای بازگشتی کارآمدتر را فراهم میکند.
یادآوری: برنامهنویسی تابعی پیادهسازی آسان یادآوری را تسهیل میکند، تکنیکی برای ذخیره نتایج فراخوانیهای تابع پرهزینه و اجتناب از محاسبات تکراری.
مزایا:
- بهبود عملکرد برای الگوریتمهای بازگشتی
- کاهش خطرات سرریز پشته
- راهحلهای زیبا برای مسائل برنامهریزی پویا
10. پردازش موازی با ویژگیهای جدید جاوا 8 بهطور قابل توجهی سادهتر میشود
ما میتوانیم به راحتی مثال قبلی را برای سرعت بخشیدن به اجرا موازی کنیم.
جریانهای موازی: جاوا 8 جریانهای موازی را معرفی میکند، که امکان موازیسازی آسان عملیات پردازش داده را بدون مدیریت صریح رشتهها فراهم میکند.
یکپارچگی چارچوب Fork/Join: جریانهای موازی از چارچوب Fork/Join در پشت صحنه استفاده میکنند، که کار دزدی کارآمد برای وظایف موازی را فراهم میکند.
ملاحظات موازیسازی:
- اندازه داده: موازیسازی برای مجموعههای داده بزرگ بیشترین سود را دارد
- پیچیدگی عملیات: عملیات محاسباتی فشرده بیشتر از موازیسازی بهره میبرند
- ایمنی رشته: اطمینان حاصل کنید که عملیات هنگام استفاده از جریانهای موازی ایمن برای رشته هستند.
آخرین بهروزرسانی::
نقد و بررسی
کتاب برنامهنویسی تابعی در جاوا عمدتاً نظرات مثبتی دریافت کرده و میانگین امتیاز آن ۴.۱۶ از ۵ است. خوانندگان از معرفی مختصر مفاهیم برنامهنویسی تابعی و ویژگیهای جاوا ۸ قدردانی میکنند. بسیاری این کتاب را برای درک لامبداها و کاربردهای عملی آنها مفید میدانند. سبک پرشور نویسنده مورد تحسین قرار گرفته، هرچند برخی آن را کمی طولانی مییابند. این کتاب بهویژه برای مبتدیانی که از برنامهنویسی دستوری به برنامهنویسی تابعی منتقل میشوند، بسیار مفید تلقی میشود. برخی خوانندگان اشاره میکنند که در حالی که این کتاب نمای کلی خوبی ارائه میدهد، ممکن است برای توسعهدهندگان با تجربهتر عمق کافی نداشته باشد.