طعم جاوا 8 – قسمت اول

حدود یک سال از معرفی جاوا 8 (Java 1.8) گذشته است. ولی هنوز بسياری از برنامهنویسان جاوا، با این نسخه آشنا نیستند. در این مطلب، و انشاءالله در چند مطلب بعدی، سعی میکنیم نمونههایی از امکانات جاوا 8 را معرفی کنیم. البته این مطالب جنبه «آموزشی» کمتری دارند و هدف آنها آشنایی با مفاهیم جدید است. به همیندلیل، انجمن جاواکاپ به زودی اسلایدهای فارسی برای آموزش جاوا 8 را نیز در اختیار عموم قرار خواهد داد.
شاید آخرین نسخه از زبان جاوا، Java 8 ، گستردهترين تغییرات را در زبان جاوا ایجاد کرده است. در هیچ نسخهای (حتی در Java 1.5) تغییرات و امکانات تا این حد گسترش نیافته بود. امکاناتی مانند عبارتهای لامبدا (Lambda Expressions) ، جویبارها (Stream) و ابزارهای تسهیلشده پردازش موازی در جاوا 8 ارائه شدند. به نظر میرسد با این تغییرات، برنامهنویسی جاوا دچار تحول میشود و «نحوه برنامهنویسی» تغییر میکند. به خصوص رویکرد تابعی (Functional Programming) در جاوا رایج میشود. بنابراین، اگر با جاوا 8 آشنا نباشیم، به زودی دستخط برنامهنویسان جدید را نخواهیم فهمید!
به عنوان مثال، برنامه زير را ببینید که با کمک امکانات جاوا 8 نوشته شده است:
IntStream.range(2, 100).filter(a -> IntStream.range(2, a - 1).noneMatch(x -> a % x == 0)).forEach(System.out::println);
اگر این دستخط برای شما غريب است، ادامه مطلب را بخوانید!
کد بالا، یک قطعهبرنامه یکخطی است که مجموعه اعداد اول کوچکتر از 100 را چاپ میکند. بدون (ظاهراً) هیچ حلقهای و با ساختارهای عجیبی که قبلاً در جاوا ندیده بودیم. اما جالب آنجاست که حتی کسی که با جاوا 8 آشنا نیست، شاید با کمی دقت بفهمد که این کد «قرار است چه کاری انجام دهد» ، البته مشهود نیست که «چگونه قرار است این کار را انجام دهد». برای این که منظورم مشخص شود، کد بالا را از چپ با راست با من بخوانید:
– یک دنباله از اعداد صحیح از 2 تا 100 را در نظر بگیرید:
IntStream.range(2, 100)
– این مجموعه را فیلتر کن و مواردی مانند a را حفظ کن که در دنباله اعداد صحیح 2 تا a-1 ، هیچ x ای وجود نداشته باشد که a به x بخشپذیر باشد:
filter(a -> IntStream.range(2, a - 1).noneMatch(x -> a % x == 0))
– هر یک از مواردی که باقی ماندند را به تابع System.out.println بفرست:
forEach(System.out::println);
به همین راحتی! در رویکرد جدید، به جای توصيف نحوه اجرا کار (چگونه)، خود کار را توصيف میکنیم. به این ترتیب برنامهنویسی سادهتر خواهد شد و فهم و نگهداری برنامهها هم کمهزينهتر خواهد بود.
حالا یک سؤال: حدس میزنید قطعه کد زير چه میکند؟
int[] array = {1,2,3,10,20,30}; Arrays.stream(array).parallel().forEach(System.out::println);
انشاءالله به زودی، و در مطالب بعدی، بیشتر با جاوا 8 آشنا خواهیم شد.
جالب است _ اگر پستها طولانی تر بود و مفاهیم و قطعه کدهای بیشتری را هر بار تحلیل می کردید بهتر بود
منتظر ادامه مطلب
داتنت بنده خدا هم یه سری فحش که میخورد به دلیل یه همچین امکاناتش بود. اما خوشم میاد توسعه دهندگان جاوا دگم نیستنتد و در صورتی که ببینند یک فیچر مزیت فوق العاده ای دارد با وجود زیر سوال بردن شیء گرایی اونو اضافه میکنن.
با سلام
ممنون و متشکر
خوب بود.
یادش بخیر! روزی روزگاری به زبان پایتون به دلیل داشتن همین امکانات، بد و بیراه های فراوانی داده میشد…