Facebook Pixel
Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Java 8 in Action

Java 8 in Action

توسط Raoul-Gabriel Urma 2014 424 صفحات
4.35
500+ امتیازها
گوش دادن

نکات کلیدی

1. جاوا 8 معرفی می‌کند عبارات لامبدا و رابط‌های تابعی برای کد مختصر و انعطاف‌پذیر

عبارات لامبدا می‌توانند کد شما را خواناتر و انعطاف‌پذیرتر کنند.

نحو مختصر. عبارات لامبدا راهی برای انتقال رفتار به عنوان یک آرگومان متد فراهم می‌کنند، که منجر به کدی انعطاف‌پذیرتر و قابل استفاده مجدد می‌شود. این عبارات در واقع توابع ناشناس هستند که می‌توانند در هر جایی که یک رابط تابعی مورد انتظار است، استفاده شوند. رابط‌های تابعی، رابط‌هایی با یک متد انتزاعی هستند، مانند Predicate، Function و Consumer.

خوانایی بهبود یافته. با استفاده از عبارات لامبدا، می‌توانید کدی بیانگرتر و خواناتر بنویسید. به عنوان مثال، به جای کلاس‌های داخلی ناشناس پرحجم، می‌توانید از نحو فشرده لامبدا استفاده کنید:

  • قبل: new Comparator<Apple>() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }
  • بعد: (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())

ارجاعات متد. جاوا 8 همچنین ارجاعات متد را به عنوان یک نشانه‌گذاری کوتاه برای لامبداهایی که به سادگی یک متد موجود را فراخوانی می‌کنند، معرفی می‌کند. این امر خوانایی و قابلیت استفاده مجدد کد را بیشتر بهبود می‌بخشد.

2. API استریم‌ها پردازش داده‌ها به صورت اعلامی و موازی را ممکن می‌سازد

استریم‌ها می‌توانند به صورت موازی پردازش شوند، بدون اینکه نیازی به نوشتن کد چندنخی داشته باشید!

برنامه‌نویسی اعلامی. API استریم‌ها به شما اجازه می‌دهد تا پرسش‌های پیچیده پردازش داده‌ها را به صورت اعلامی بیان کنید. به جای نوشتن چگونگی انجام عملیات به صورت گام به گام، شما توصیف می‌کنید که چه چیزی می‌خواهید به دست آورید. این منجر به کدی مختصرتر و خواناتر می‌شود.

موازی‌سازی. استریم‌ها به راحتی می‌توانند موازی شوند تا از پردازنده‌های چند هسته‌ای بهره‌برداری کنند. با تغییر ساده stream() به parallelStream()، می‌توانید به طور بالقوه عملکرد را بدون تغییر منطق کد خود بهبود بخشید.

ارزیابی تنبل. عملیات استریم به صورت تنبل ارزیابی می‌شوند، به این معنی که محاسبه بر روی داده‌های منبع تنها زمانی انجام می‌شود که عملیات نهایی آغاز شود. این می‌تواند منجر به بهبودهای قابل توجهی در عملکرد شود، به ویژه هنگام کار با مجموعه داده‌های بزرگ.

عملیات کلیدی استریم شامل موارد زیر است:

  • میانی: filter، map، flatMap، distinct، sorted، limit
  • نهایی: forEach، count، collect، reduce، find، match

3. متدهای پیش‌فرض در رابط‌ها اجازه می‌دهند تکامل API بدون شکستن پیاده‌سازی‌های موجود

متدهای پیش‌فرض به طراحان کتابخانه کمک می‌کنند تا APIها را به صورت سازگار با گذشته تکامل دهند.

تکامل API. متدهای پیش‌فرض به شما اجازه می‌دهند تا متدهای جدیدی به رابط‌ها اضافه کنید بدون اینکه پیاده‌سازی‌های موجود را بشکنید. این ویژگی عمدتاً برای تکامل API مجموعه‌های جاوا معرفی شد، که امکان افزودن متدهای جدید مانند stream() به رابط‌های موجود را فراهم می‌کند.

وراثت چندگانه رفتار. با متدهای پیش‌فرض، جاوا اکنون از یک فرم محدود از وراثت چندگانه رفتار پشتیبانی می‌کند. رابط‌ها می‌توانند کد پیاده‌سازی ارائه دهند، نه فقط امضای متدها.

قوانین حل تعارض. هنگامی که یک کلاس چندین رابط با متدهای پیش‌فرض متعارض را پیاده‌سازی می‌کند، جاوا 8 قوانین حل تعارض واضحی ارائه می‌دهد:

  1. کلاس‌ها همیشه برنده می‌شوند بر رابط‌ها
  2. رابط‌های خاص‌تر بر رابط‌های کمتر خاص برتری دارند
  3. اگر هنوز تعارضی وجود داشته باشد، کلاس باید به صراحت متد را بازنویسی کند

4. کلاس Optional بهبود مدیریت null و طراحی API

استفاده از Optional می‌تواند به شما کمک کند تا APIهای بهتری طراحی کنید که با خواندن امضای یک متد، کاربران می‌توانند تشخیص دهند که آیا باید انتظار یک مقدار اختیاری را داشته باشند.

جایگزین null. کلاس Optional راه بهتری برای نمایش عدم وجود یک مقدار فراهم می‌کند، به جای استفاده از ارجاعات null. این امر به جلوگیری از NullPointerExceptions کمک می‌کند و کد را خواناتر می‌سازد.

طراحی API. با استفاده از Optional در امضای متدها، شما به صراحت اعلام می‌کنید که ممکن است یک مقدار غایب باشد. این منجر به طراحی بهتر API می‌شود و کاربران را مجبور می‌کند تا به حالتی که یک مقدار وجود ندارد، توجه کنند.

Optional چندین متد برای مدیریت ایمن ارائه می‌دهد:

  • isPresent() برای بررسی وجود یک مقدار
  • ifPresent(Consumer<T>) برای اجرای یک عمل اگر یک مقدار وجود داشته باشد
  • orElse(T) برای ارائه یک مقدار پیش‌فرض
  • orElseGet(Supplier<T>) برای ارائه تنبل یک مقدار پیش‌فرض
  • map(Function<T,U>) و flatMap(Function<T,Optional<U>>) برای تبدیل‌ها

5. API جدید تاریخ و زمان به کاستی‌های کلاس‌های تاریخ/زمان قبلی می‌پردازد

اشیاء تاریخ-زمان API جدید تاریخ و زمان همگی غیرقابل تغییر هستند.

غیرقابل تغییر بودن. بسته جدید java.time کلاس‌های تاریخ-زمان غیرقابل تغییر را معرفی می‌کند، که ایمن در برابر نخ هستند و از بسیاری از خطاهای برنامه‌نویسی رایج مرتبط با کلاس‌های تاریخ-زمان قابل تغییر جلوگیری می‌کنند.

جداسازی نگرانی‌ها. API به وضوح جدا می‌کند:

  • زمان قابل خواندن توسط انسان (LocalDate، LocalTime، LocalDateTime)
  • زمان ماشینی (Instant)
  • مناطق زمانی (ZonedDateTime)
  • دوره‌های زمانی (Duration، Period)

API روان. کلاس‌های جدید یک API روان برای انجام عملیات ارائه می‌دهند، که دستکاری تاریخ و زمان را شهودی‌تر و کمتر مستعد خطا می‌سازد. به عنوان مثال:

LocalDate date = LocalDate.of(2023, Month.MAY, 15)
                           .plusDays(7)
                           .minusMonths(1);

6. CompletableFuture برنامه‌نویسی غیرهمزمان و واکنشی را تسهیل می‌کند

CompletableFuture به شما اجازه می‌دهد تا محاسبات غیرهمزمان پیچیده را به صورت اعلامی بیان کنید.

برنامه‌نویسی غیرهمزمان. CompletableFuture رابط Future را گسترش می‌دهد، و راهی برای انجام محاسبات غیرهمزمان و ترکیب نتایج آن‌ها فراهم می‌کند. این امر به ویژه برای ساخت برنامه‌های پاسخگو و استفاده کارآمد از منابع سیستم مفید است.

ترکیب‌پذیری. CompletableFuture به شما اجازه می‌دهد تا چندین عملیات غیرهمزمان را زنجیره کنید، که بیان جریان‌های کاری پیچیده را آسان می‌کند. متدهایی مانند thenApply، thenCompose و thenCombine به شما اجازه می‌دهند تا نتایج محاسبات غیرهمزمان را تبدیل و ترکیب کنید.

ویژگی‌های کلیدی:

  • عملیات غیرمسدودکننده
  • مدیریت استثنا با متدهای exceptionally و handle
  • توانایی ترکیب چندین آینده با allOf و anyOf
  • پشتیبانی از مدیریت زمان‌بندی

7. مفاهیم برنامه‌نویسی تابعی بیانگری و نگهداری‌پذیری جاوا را افزایش می‌دهند

برنامه‌نویسی به سبک تابعی روش‌های بدون اثر جانبی و برنامه‌نویسی اعلامی را ترویج می‌کند.

غیرقابل تغییر بودن. برنامه‌نویسی تابعی بر استفاده از ساختارهای داده غیرقابل تغییر تأکید دارد، که منجر به کدی پیش‌بینی‌پذیرتر و نگهداری‌پذیرتر می‌شود. در جاوا 8، این امر از طریق استفاده از متغیرهای نهایی و مجموعه‌های غیرقابل تغییر پشتیبانی می‌شود.

توابع مرتبه بالاتر. جاوا 8 امکان انتقال توابع به عنوان آرگومان و بازگرداندن آن‌ها به عنوان نتایج را معرفی می‌کند، که انتزاعات قدرتمند و استفاده مجدد از کد را ممکن می‌سازد. این امر از طریق عبارات لامبدا و ارجاعات متد به دست می‌آید.

سبک اعلامی. برنامه‌نویسی تابعی یک سبک اعلامی از برنامه‌نویسی را تشویق می‌کند، جایی که شما توصیف می‌کنید که چه چیزی می‌خواهید به دست آورید، نه اینکه چگونه به آن دست یابید. این امر اغلب منجر به کدی مختصرتر و خواناتر می‌شود.

مفاهیم کلیدی برنامه‌نویسی تابعی در جاوا 8:

  • توابع خالص (متدهای بدون اثرات جانبی)
  • ترکیب توابع
  • ارزیابی تنبل (همانطور که در API استریم‌ها دیده می‌شود)
  • بازگشت به عنوان جایگزینی برای تکرار

8. مقایسه با اسکالا قابلیت‌ها و محدودیت‌های برنامه‌نویسی تابعی جاوا 8 را برجسته می‌کند

اسکالا مجموعه بزرگتری از ویژگی‌ها را در اطراف این ایده‌ها نسبت به جاوا 8 ارائه می‌دهد.

تفاوت‌های نحوی. اسکالا نحو مختصرتری برای بسیاری از عملیات‌ها ارائه می‌دهد، مانند ایجاد و کار با مجموعه‌ها. به عنوان مثال، ایجاد یک نقشه در اسکالا:

val authorsToAge = Map("Raoul" -> 23, "Mario" -> 40, "Alan" -> 53)

ویژگی‌های پیشرفته تابعی. اسکالا ویژگی‌های پیشرفته‌تری از برنامه‌نویسی تابعی ارائه می‌دهد، از جمله:

  • تطبیق الگو
  • ارزیابی تنبل
  • کرینگ
  • ویژگی‌ها (مشابه رابط‌های جاوا اما با قابلیت‌های بیشتر)

سیستم نوع. اسکالا دارای یک سیستم نوع پیشرفته‌تر است، از جمله ویژگی‌هایی مانند:

  • استنباط نوع
  • انواع مرتبه بالاتر
  • تبدیل‌های ضمنی

در حالی که جاوا 8 بسیاری از مفاهیم برنامه‌نویسی تابعی را معرفی می‌کند، همچنان سازگاری با گذشته و یک منحنی یادگیری تدریجی‌تر را نسبت به رویکرد جامع‌تر برنامه‌نویسی تابعی اسکالا حفظ می‌کند.

آخرین به‌روزرسانی::

نقد و بررسی

4.35 از 5
میانگین از 500+ امتیازات از Goodreads و Amazon.

کتاب جاوا 8 در عمل به خاطر پوشش جامع ویژگی‌های جاوا 8، به‌ویژه لامبداها و استریم‌ها، مورد تحسین قرار گرفته است. خوانندگان از توضیحات روشن، مثال‌های عملی و بینش‌های ارائه‌شده در زمینه برنامه‌نویسی تابعی قدردانی می‌کنند. بسیاری این کتاب را برای به‌روزرسانی دانش جاوا و پر کردن فاصله بین نسخه‌های قدیمی و جاوای مدرن مفید می‌دانند. تمرکز کتاب بر روی جاوا 8 هم به‌عنوان یک نقطه قوت و هم به‌عنوان یک نقطه ضعف مطرح می‌شود، زیرا برخی از محتوا با انتشار نسخه‌های جدیدتر جاوا قدیمی می‌شود. با این حال، این کتاب همچنان به‌عنوان منبعی بسیار توصیه‌شده برای توسعه‌دهندگان جاوا که به دنبال ارتقاء درک خود از مفاهیم برنامه‌نویسی تابعی و ویژگی‌های جاوا 8 هستند، باقی می‌ماند.

درباره نویسنده

راول-گابریل اورما نویسنده‌ای معتبر و متخصص در زمینه برنامه‌نویسی جاوا است. اگرچه اطلاعات بیوگرافی خاصی در محتوای ارائه‌شده وجود ندارد، اما کتاب او با عنوان «جاوا 8 در عمل» به‌طور گسترده‌ای مورد تحسین خوانندگان و حرفه‌ای‌های جامعه توسعه نرم‌افزار قرار گرفته است. سبک نوشتاری اورما به خاطر وضوح، عمق و توانایی‌اش در توضیح مفاهیم پیچیده به شیوه‌ای قابل‌فهم مورد ستایش قرار می‌گیرد. تخصص او در ویژگی‌های جاوا 8، به‌ویژه مفاهیم برنامه‌نویسی تابعی، در سرتاسر کتاب مشهود است. رویکرد اورما ترکیبی از دانش نظری و مثال‌های عملی است که کار او را برای هر دو گروه تازه‌واردان و توسعه‌دهندگان باتجربه جاوا که به‌دنبال به‌روزرسانی مهارت‌های خود هستند، ارزشمند می‌سازد.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Unlock unlimited listening
Your first week's on us!
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Dec 11,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to summaries
12,000+ hours of audio
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
30,000+ readers
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →