بررسی ویرایش سوم کتاب Effective Java
جاشوا بلاچ بالاخره کتاب مشهور خود، Effective Java را برای ویرایش جدید به روز کرده و در آن جاوا 7، 8 و 9 را در نظر گرفته است. انتشار نسخۀ سوم از این کتاب یکی از خبرهای خوب روزهای پایانی سال 2017 به شمار میرود.
معرفی ویرایش جدید
Thorben Janssen در مقالهای به معرفی ویرایش سوم این کتاب پرداخته است که در ادامه بخشی از آن را با هم میخوانیم.
ویرایش قبلی کتاب یکی از رایجترین کتابها بین برنامهنویسان حرفهای جاوا بود. من چشم به راه ویرایش جدید بودم. حدودا دو هفتۀ پیش کتاب به دستم رسید و بسیار بهتر از چیزی بود که انتظارش را داشتم. کتاب پر از بهترین دستور العملها و جزئیات ریز و کاربردی در مورد زبان جاواست. هر برنامهنویسی حداقل یک بار باید بخشهای مروبوط به genericها و لامداها را بخواند.
کار جاوشوا بلاچ در شرح Best Practiceها و بینش او در این که چه موقع و چگونه از ویژگیهای جاوا استفاده کنیم عالی است.
کتاب به درد چه کسانی میخورد؟
هر برنامهنویس حرفهای جاوا که میخواهد کد کارامد و قابل نگهداری بنویسد.
مرور جزئی
کتابهای زیادی در زمینۀ جاوا نوشته شده و بعضی از آنها ویژگیهای متفاوت زبان را به خوبی شرح دادهاند. اما اگر میخواهید برنامهنویس حرفهای شوید، آنها تنها قدم اول را به شما نشان میدهند. بین دانستن یک ویژگی در جاوا و فهم این که کِی و چگونه از آن برای ساخت یک نرمافزار کارا و قابل نگهداری استفاده کنید، فاصلۀ زیادی است.
اگر ویرایش قبلی کتاب را خوانده باشید میدانید کار نویسنده در نشان دادن بهترین روش کدنویسی با یک ویژگیِ زبان، بینظیر است. این مسئله در ویرایش جدید نیز تکرار شده و ویژگیها و تغییرات جاوا 7، 8 و 9 نیز در نظر گرفته شده است. مطالعۀ تغییرات علیالخصوص در مورد طراحی واسطها، دادههای نوع عام (Generics) و لامداها برای هر برنامهنویس جاوا ضروری است.
توصیههای اختصاصی برای هر موضوع در 90 بخش
در عرض دو هفته کتاب را از اول تا آخر خواندم، شما را هم اکیدا به این کار توصیه میکنم، هم سرگرم کننده بود و هم پر از مطالب جدید.
اما شما لزوما مجبور نیستید تمام کتاب را بخوانید. محتوای کتاب در 90 بخش سازماندهی شده و اگر دنبال موضوع خاصی میگردید میتوانید تنها آن را بخوانید. هر بخش به تنهایی میتواند یکی از ویژگیها را مستقلا شرح دهد. نویسنده در هر بخشی به شما خواهد گفت که چگونه از یک ویژگی استفاده کنید و چه مواقعی از آن اجتناب کنید.
ساختار و شیوۀ سازماندهی کتاب، مطالب را برای مراجعۀ روزانه و استفادۀ کاری بسیار سهلالوصول کرده است. مثل نسخۀ قبلی، این کتاب نیز یکی از کتابهایی خواهد بود که هر موقع بخواهم یک کار پیچیده انجام دهم یا یک API جدید طراحی کنم به آن مراجعه خواهم کرد. مطمئنم به زودی و دوباره، به بخشهای پیشرفتۀ آن دربارۀ لامدا و دادههای نوع عام برگشته و آنها را مرور خواهم کرد.
لیست فصلهای کلی که 90 بخش به صورت موضوعی در داخل آنها جای داده شده است به شرح زیراند:
- Creating and destroying objects
- Methods common to all objects
- Classes and interfaces
- Generics
- Enums and annotations
- Lambdas and Streams
- Methods
- General programming
- Exceptions
- Concurrency
- Serialization
عنوان بعضی از فصلها به نظر خیلی ساده و ابتدایی میآید اما با این وجود توصیه میکنم تمام بخشها را بخوانید. هر بخش حاوی بینشهای عمیقی در ویژگیهای جاوا است و روش درستی که باید از آنها استفاده شود را شرح میدهد. بعد از 15 سال تجربۀ کار به عنوان برنامهنویس و معمار نرمافزار، با خواندن هر بخش چیزهای جدیدی یاد گرفتم و فهمیدم.
در ادامه به برخی از عناوین جدیدی که در این کتاب آورده شده است اشاره میکنیم. این بخش از نوشتۀ Dustin Marx از سایت DZone برداشت شده است.
عناوین جدید مربوطه به جاوا 7
Item 9 (“Prefer try-with-resources to try-finally”)
Item 32 (“Combine generics and varargs judiciously”)
در این بخش کاربرد SafeVarargs@ که در جاوا 7 معرفی و در جاوا 9 ارتقا داده شد، شرح داده شده است.
Item 8 (“Avoid finalizers and cleaners”)
واسط AutoCloseable و مواردی که میتوان از آن استفاده کرد شرح داده شده است.
Item 49(“Check parameters for validity”)
متدهای Objects.requireNonNull شرح داده شده است.
Item 80 (“Prefer executors, tasks, and streams to threads”)
استریمها، Fork/Join Framework، و Executorها در این بخش شرح داده شدهاند.
Item 59 (“Know and Use the Libraries”)
کاربرد ThreadLocalRandom توضیح داده شده است.
Item 56 (“Write doc comments for all exposed API elements”)
سوییچ Xdoclint، از دستورهای خط فرمانِ Javadoc شرح داده شده است.
عناوین جدید مربوط به جاوا 8
Item 21 (“Design interfaces for posterity”)
مباحث مروبوط با متدهای default در واسطها شرح داده شده ست.
Chapter 7 (“Lambdas and Streams”) (Item 42 through Item 48)
Item 55 (“Return optionals judiciously”)
ملاحظاتی که باید در استفاده از کلاس Optional در نظر گرفته شود، آورده شده است.
Item 1 (“Consider static factory methods instead of constructors”)
امکان تعریف متدهای استاتیک برای اینترفیسها در جاوا 8 مهیّا شده و در آیتم فوق در مورد آن بحث شده است.
Item 19(“Design and document for inheritance or else prohibit it”)
این بخش در ویرایش قبلی کتاب نیز موجود بود اما استفاده از implSpec@ که در جاوا 8 معرفی شده و در جاوا 9 بسیار پرکاربرد بوده در آن شرح داده شده است.
Item 56 (“Write doc comments for all exposed API elements”)
بحث implSpec@ در این بخش دوباره مطرح شده است.
Item 50 (“Make defensive copies when needed”)
بیشتر به کاربرد Instant به جای Date از Date-Time API میپردازد که در جاوا 8 عرضه شده است.
عناوین جدید مربوط به جاوا 9
Item 15(“Minimize the accessibility of classes and members”)
جاوا 9 در نظر بسیاری از افراد، بیشتر با JPMS یا سیستم ماژولاریتی جدیدی که معرفی کرده شناخته میشود. اما Effective Java کمتر از انتظار به این موضوع پرداخته، هر چند، ذیل عنوان فوق، دو سطح دسترسیِ[1] جدیدی که به واسطۀ JPMS به جاوا اضافه شده را شرح داده است.
Item 8 (“Avoid finalizers and cleaners”)
در ویرایش جدید، کلمۀ Cleaners به عنوان بخش اضافه شده و در مورد finalizer که در جاوا 9، متروک شده، شرح داده شده است.
Item 56 (“Write doc comments for all exposed API elements”)
در این قسمت، به تگ {index@} که در جاوا 9 به Javadoc اضافه شده اشاره شده است.
Item 59 (“Know and Use the Libraries”)
متدِ (transferToOutputStream) از کلاس InputStream که در جاوا 9 اضافه شده است.
در آیتم فوق بحث دیگری در مورد اهمیت دانستن امکانات موجود در API استاندارد و استفاده از آنها نیز شده است.
Item 6 (“Avoid creating unnecessary objects”)
سازندۀ کلاس Boolean که با دریافت پارامتری از نوع String شیءای از آن میساخت و در جاوا 9 متروک شده، به عنوان مثالی از ساخت اشیاء غیر ضروری بررسی شده است.
عناوین جدید مستقل از نسخههای جاوا
Item 5 (“Prefer dependency injection to hardwiring resources”)
Item 25 (“Limit source files to a single top-level class”)
Item 85 (“Prefer alternatives to Java serialization”)
برای مطالعۀ بیشتر در مورد بخش 85 میتوانید به این مقاله مراجعه کنید.
[1] Access Level
منابع:
معرفی ویرایش سوم از Effective Java در سایت Thoughts on Java
تغییرات جدید ویرایش سوم Effective Java، مقاله ای از سایت DZone.com