طعم جاوا 8 – قسمت دوم
در این مقاله کوتاه، جزئيات بیشتری درباره جاوا 8 و تغییرات موجود در این نسخه را مرور میکنیم. همچنین تلاش میکنیم به پاسخ این سؤالها نزدیک شویم: در جاوا 8 چه اتفاقاتی افتاده است؟ آیا باید از جاوا 8 استفاده کنیم؟ آیا باید آموزش جاوا 8 را آغاز کنیم؟
در جاوا 8 چه اتفاقاتی افتاده است؟
در مقاله قبلی، اشارهای گذرا به جاوا 8 داشتیم. جاوا 8، یا به عبارت دیگر نسخه 1.8، تغییراتی مهم، گسترده و انقلابی در زبان جاوا ایجاد کرده است. هنوز بسياری از تیمها و شرکتهای برنامهنویسی در ایران (و حتی در کشورهای دیگر) از جاوا 8 استفاده نمیکنند. بسياری از برنامه نویسان تغییرات جاوا در این نسخه را نمیشناسند. اما این تغییرات چقدر مهم هستند؟ در ادامه به برخی از این امکانات جدید اشاره میکنیم:
– ارجاع به متد (Method References). در نسخه 8، متدها به عنوان شهروند درجه یک شناخته میشوند. مثلاً میتوانیم متغیرهایی داشته باشیم که به یک متد اشاره میکنند. مثال:
Converter<String, Integer> converter = Integer::valueOf;
– معرفی عبارتهای لامبدا (Lambda Expressions). خیلیها جاوا 8 را با امکان جدید «لامبدا» (یا لاندا) میشناسند. یک عبارت لامبدا، یک تابع را توصیف میکند و میتواند به عنوان یک متغیر نگهداری شود و یا به یک متد پاس شود. بدنه تابع موردنظر، به صورت مختصر و گویا در عبارت لامبدا نشان داده میشود. مثلاً عبارت زير همانند تابعی است که یک رشته به عنوان پارامتر میگیرد و طول آن را برمیگرداند:
(String s) -> s.length();
– معرفی مفهوم جویبار (Stream). جویبار، امکان جدیدی در جاوا است (این موضوع را با امکانات IO مانند InputStream و OutputStream اشتباه نگیرید). جویبار روشی برای پردازش دنبالهای از اشیاء است. معمولاً از عبارتهای لامبدا و ارجاع به متدها در جویبارها استفاده میشود. امکانات مختلفی مانند مرتبسازی، تبدیل نوع وخلاصهسازی برای جویبارها تعريف شده است. مثلاً قطعهبرنامه زیر، یک جویبار (stream) روی متغیر list میسازد (فرض کنید list از نوع List<Person> است) و افرادی که دانشجو نیستند را حذف میکند (filter) و بقیه را براساس سن مرتب میکند (sorted) و نام (name) ده نفر اول (limit) را چاپ میکند. البته همه این کارها را به صورت موازی و همروند (parallel) انجام میدهد. اینهمه کار، فقط با همین یک دستور ترکیبی. و فقط یک سمیکالون!
list.stream() .parallel() .filter(e->e.isStudent() ) .sorted((a,b)->a.age()-b.age()) .limit(10) .forEach(e->System.out.println(e.name()));
چرا جاوا 8 نسخه مهمی است؟
نسخه جاوا 8، فقط امکاناتی جدید برای زبان نیست. یک تغییر نگرش و یک نقطه عطف در زندگی این زبان است. جاوا 8 گستردهترين تغییر در تاریخ «زبان جاوا» است. این تغییرات، حتی گستردهتر از جاوا 5 است که ساختارهای مهمی مانند Generic و Annotation را معرفی کرد.
مهمترين نکته جدید در این نسخه، امکان برنامهنویسی تابعی (Functional Programming) است. با این رویکرد، برنامههایی تولید میشوند که کوتاهتر، موجزتر و گویاتر هستند. برنامهنویس جاوا 8 میتواند «تابعی» بیاندیشد (Thinking Functional)، یعنی به جای چگونگی انجام کار (how to do)، میتواند هدف کار (what to do) را توصیف کند. این تغییر نگرش، در عمر جاوا بیسابقه است. برنامهنویس جاوا عادت داشته که شیءگرا فکر کند. همه زبان جاوا را به عنوان زبانی شیءگرا (Object Oriented) میشناسند. بنابراین، با معرفی جاوا 8 ، دستخط برنامهنویسی جاوا به مرور تغییر خواهد کرد. اگر دانش جاوا 8 نداشته باشیم، بسياری از کدهای جدید را نخواهیم فهمید.
آیا باید از امروز از جاوا 8 استفاده کنیم؟
جاوا 8 نسخه مهمی است. اما به سرعت به سراغ استفاده از آن نروید. بسياری از کتابخانهها و ابزارها کمکم به سوی جاوا 8 خواهند رفت. بنابراین به مرور ناگزیر از مهاجرت به جاوا 8 خواهیم بود. اما عجله نکنید. آموزش تیم برنامهنویسی و بلوغ ابزارها، حداقل پیشنیازها برای این گذار هستند. طبق یک گزارش که قبلاً در جاواکاپ منتشر کردیم، بسياری از تیمهای برنامهنویسی جاوا، گذار آرام به جاوا 8 را در برنامه سال 2015 خود دیدهاند.
خیلی خوب، اما چرا این قدر دیر؟
شاید تغییرات جاوا در نسخه 8، در دنیای برنامهنویسی جدید نباشند. زبانهایی مانند اسکالا و حتی زبانهای خانواده داتنت ، برخی از امکانات جدید جاوا 8 را قبلاً ارائه کردهاند. بنابراین اگر با یک برنامهنویس سیشارپ یا اسکالا همنشین شدید، اجازه ندهید متوجه ذوقزدگی شما از امکانات جدید جاوا شود. اگر هم با این طعنه مواجه شدید که: «مدتهاست که ما این امکانات را داریم!»، پاسخی مانند این بدهید: «جاوا زبان مهم و جاافتادهایست و هر تغییری در چنین زبانی باید حسابشده و بهموقع باشد»، و اگر این ترفند کارگر نبود، بحث را عوض کنید (در این شرایط صحبت از آب و هوا و به خصوص آلودگی هوا و ترافیک توصیه میشود). خلاصه، صحبت از نقش اوراکل در این تأخیر یا مواردی از این دست نکنید چون این بحثهای داخلی، باید در خانواده جاواکارها بماند. نمونه اینگونه بحثها را در کامنتهای مطلب قبلی ببینید.
از این شوخی که بگذریم، نکته مهم این است که جاوا، از اواخر دهه 90 میلادی، همواره زبان بسيار مهمی بوده است و تغییرات اخیر جاوا قطعاً در زنده ماندن و ایفای نقش این زبان مهم، مؤثر و مفید خواهد بود. جاوا 8، قصد دارد پرچم جاوا را بالا نگه دارد.
در مطالب بعدی، آموزش امکانات جاوا8 را آغاز میکنیم.
میشه امکان دانلود به صورت پی دی افش رو هم قرار بدید ؟؟؟