دانستنی‌ها

نسخه۱۴ جاوا: چه قابلیت‌های جدیدی اضافه شده‌است

جاوا ۱۴ اکنون در دسترس است!

نسخه‌ٔ ۱۴ جاوا طبق سیاست عرضه نسخه جدید در هر۶ ماه، در تاریخ ۱۷ مارچ ۲۰۲۰ منتشر شد. در این نسخه، تعداد زیادی بهبود و پیش‌رفت صورت گرفته، چیزی بیش‌تر از مجموع جاوا ۱۲ و ۱۳.

برخی تغییرات جاوا ۱۴ عبارت است از:

  1. تطبیق الگو برای instanceof (پیش‌نمایش)

  2. نمایش موثرتر استثنای NullPointer

  3. سوییچ‌‌کیس به عنوانِ عبارت

  4. ابزار پکیج‌بندی jpackage (در حال توسعه)
  5. recordها (پیش‌نمایش)

  6. لیترالِ رشته‌ٔ چندخطی (پیش‌نمایش دوم)

تطبیق الگو برای instanceof

عبارت instanceof برای بررسی این استفاده می‌شود که آیا شی‌ای (Objectای) که در حافظه رفرنس به آن را داریم،‌ از کلاس مورد نظر هست یا نه. اضافه شدن تطبیق الگو (pattern matching) به جاوا این امکان را می‌دهد که عبارات بررسی instanceof موجزتر و خواناتر نوشته بشوند. در واقع، امکان جدیدِ اضافه‌شده، این است که در همان عبارت instanceof، عمل cast هم به صورت ضمنی انجام شود و کد‌های تکراری (مشابه آن‌چه در توابع equals می‌بینیم) ساده‌تر و خوانا‌تر شوند.

کد قبل از جاوا ۱۴

کد جدید با بهبود‌های جاوا ۱۴

مثال دیگر:

 

نمایش موثرتر استثناهای NullPointer

همه برنامه‌نویس‌های جاوا NullPointerException را تجربه کرده‌اند. خطایی که برای برنامه‌نویسان تازه‌کار زیاد اتفاق می‌افتد ولی هیچ برنامه‌نویسی از آن مصون نیست! زبان‌های مختلف راه‌کارهای متفاوتی برای جلوگیری از این خطا ارائه کرده‌اند. مثلا nullable‌ها در کاتلین یا optional در جاوا نمونه‌‌هایی از تلاش برای خلاصی از این خطا هستند. حالا اوراکل با بهبود در خطاهای داده‌شده توسط JVM، کار برنامه‌نویسان را برای پیدا کردن علت این استثنا راحت کرده‌ است.

در نسخه‌های پیشین جاوا، خطای NPE فقط آن خط کدی که باعث نال‌پوینتر بود را مشخص می‌کرد مثلا در کد

خطایی مشابه زیر تولید می‌شد:

اما این خطا اطلاعات کافی را به ما نمی‌دهد. برای مثال فرض کنید کد ما چیزی مشابه این باشد:

در این حالت مشخص نیست که a یا b یا c کدام null بوده‌اند. در جاوا ۱۴ خطای بهبودیافته چیزی مشابه این است:

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

در صورتی که مایلید این خطاها را فعال کنید باید ماشین مجازی جاوا را با آرگومان -XX:+ShowCodeDetailsInExceptionMessages فراخوانی کنید. هم‌چنین اطلاعات بیش‌تری در این لینک موجود است.

سوییچ‌‌کیس به عنوانِ عبارت

در جاوا ۱۴، بیانیه‌های switch case گسترش یافته‌اند. اکنون با استفاده از فلش (<-) می‌توانند به عنوان عبارت استفاده شوند و مقدار را return/yield کنند. این امکان در جاوا ۱۲ و ۱۳ به صورت پیش‌نمایش وجود داشت.

مثال ۱

قبل از جاوا ۱۴

با امکانات جاوا ۱۴

 
مثال ۲

قبل از جاوا ۱۴

بعد از جاوا ۱۴

مثال‌های بیش‌تر

ابزار پکیج‌بندی jpackage

گاهی اوقات ساخت یک فایل jar برای پکیج‌کردن برنامه‌ توسعه‌داده شده به زبان جاوا کافی نیست، مثلا ممکن است برنامه ما به چندین پکیج دیگر نیاز داشته باشد‌ (dependencies). برای این منظور ناچاریم کیت نصب مناسب سیستم مقصد تدارک ببینیم.

ابزار جدید jpackage، برنامه‌جاوایی شما را داخل یک پکیج ویژه‌ٔ پلتفرم به همراه تمام پیش‌نیازها قرار می‌دهد. فرمت‌های وابسته به سخت‌افزاری که پیشتیبانی‌ می‌شوند این‌ها هستند:

  1. گنو/لینوکس: deb و rpm
  2. سیستم‌عامل مک:  pkg و dmg
  3. ویندوز: msi و exe

recordها

رکوردها، برای خلاصه‌سازی سینتکس تعریف کلاس‌ آمده‌اند (و البته هنوز در مراحل پیش‌نمایش هستند).

گاهی برای تعریف کلاس‌های ساده نیاز به نوشتن‌ کد‌های تکراری برای constructorها و متد‌های getter و setter و equals و hashCode و toString و غیره بود. برای جلوگیری از نوشتن این کد‌های تکراری، جاوا recordها را به ما معرفی می‌کند.

مثال

قبل از جاوا ۱۴

با رکورد‌های جاوا ۱۴

در استفاده از رکوردها چندین محدودیت وجود دارد:

  • نمی‌تونند از کلاس دیگری ارث‌بری کنند
  • فقط می‌توانند ویژگی‌های private و final داشته باشند.
  • به صورت ضمنی final هستند.
  • نمی‌توانند انتزائی (abstract) باشند.

مثال استفاده از recordها

همان‌طور که می‌بینید x و y عملا private هستند و دسترسی به آن‌ها با تابع getter انجام شده‌است.

برای کامپایل این برنامه هم باید از سوییچ enable-preview  --release 14-- استفاده کنید. البته بازهم خطایی مبنی بر preview بودن این قابلیت، نمایش می‌دهد.

برای اجرا نیز باید از سوییچ enable-preview--  برای ماشین مجازی جاوا استفاده کنید.

لیترالِ رشته‌ٔ چندخطی

نوشتن قطعه‌کد html یا XML یا JSON یا SQL در کد جاوا گاهی دشوار می‌شود. برای رفع این مشکل، جاوا قابلیت text block را معرفی کرده است.

یک text block، یک لیترال رشته‌ چندخطی است مشابه آنچه در پایتون به عنوان multi-line string وجود دارد.

مثال کد html بدون text block:

 سه کارکتر دابل‌کوتیشن پشت سر هم، مشخص‌کننده شروع و پایان text block است.

 

این مطلب ترجمه مطلبی از سایت techgeeknext با تلخیص و تصرف است. برخی JEP ها حذف شدند که می‌توانید در مطلب اصلی آن‌ها را ملاحظه کنید. (برداشت از مطلب مذکور در فروردین ۹۸ انجام شد.)

.

.

.

با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

 

[تعداد: 5   میانگین: 3.4/5]
برچسب ها
نمایش بیشتر

نوشته های مشابه

یک نظر

  1. سلام.
    اگه مثل جلسه ۲۰ که مربوط به جاوا ۸ ههه یک جلسه برای ویژگی ها و قابلیتهای جدید از ۸ تا ۱۴ تهیه کنید عالی میشه.
    با تشکر از وبسایت خوبتان

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا