img

با امکانات جدید در جاوا ۹ آشنا شوید…

/
/
/

بعد از چندین تاخیر جاوا ۹ سرانجام پیش روی ماست ، سه سال پس از جاوا ۸ این زبان برنامه نویسی با اضافه شدن بیش از ۱۵۰ خصوصیت جدید و تعدادی از بزرگترین تغییرات خود عرضه شده ، در این مقاله برخی از تغییرات اصلی این زبان را بررسی خواهیم کرد.

سیستم ماژول جاوا ۹ یکی از خصوصیت‌های اصلی مورد بحث و انتظار بوده که حال میخواهیم زیر و بم آنرا بررسی کنیم. جاوا با فراهم کردن یک ساز و کار خلاصه سازی و کمک یک اصلاح‌گر دسترسی هر پروژه با اندازهای قابل قبول را در چندین بسته دسته بندی خواهد کرد. اگر پروژه به اندازه کافی بزرگ باشد شما چند فایل وابسته JAR خواهید داشت. دو مشکل این مورد عبارتند از :
* تمامی دسته‌بندی‌هایی که «عمومی» محسوب نمیشوند بخشی از API هستند که احتمالا شما قصد آشکار سازی آنها را دارید.
* در صورت داشتن دو فایل JAR با دسته بندی و بسته مشابه تکلیف چیست ؟ این مورد میتواند به مشکلات بارگذاری منجر شود که شما فقط در زمان اجرای برنامه متوجه آنها خواهید شد.
برای رفع این مشکلات جاوا ۹ مفهوم ماژول را معرفی کرده است و این قابلیت سطح بالاتری از جداسازی بسته‌هاست ، برای ساخت ماژول شما باید یک فایل moduleinfo.java به پروژه خود اضافه کنید و مشخصا تعریف کنید که کلمات کد‌های مورد نیاز دیگر ماژول های وابسته همانند دیگر بسته‌هایی باشد که شما قصد آشکار سازی آنها را در دیگر دسته‌بندی‌ها دارید. به یاد داشته باشید که دیگر طبقه‌بندی‌های عمومی داخل بسته (ها) از خارج این ماژول در دسترس نیستند. نمونه‌ای از تعریف یک بسته مانند آنچه است که در ادامه آمده :

module my-module {
exports com.example.java9.classes_to_be_exposed_as_apis;
requires java.base;}

 

قابلیت JLink: برای ساخت اجرا‌های کوچک‌تر بر روی جاوا
اجراسازی جاوا از زمان به وجود آمدنش و هزاران دسته‌بندی ای که برای بهبود عملکردش به آن افزوده شده به شکل قابل ملاحظه‌ای پیشرفت داشته که آنرا بسیار مستحکم و یکپارچه ساخته است. اما تمام این خصوصیات برای یک برنامه استفاده نمیشوند ، به عنوان مثال تا زمان جاوا ۸ شما میتوانستید یک برنامه «معمولی» بسازید که تنها از دسته بندی‌های بسته java.lang استفاده میکرد ، اما اجرای آن همچنان تمام قابلیت‌های موجود در جاوا (تجزیه کننده‌های xml ، ورودی-های API ، SQL های کارکردی و غیره) را شامل میشد.
ابزار توسعه جاوا (JDK) نیز به وسیله سیستم ماژول نوشته شده به همین خاطر حتی یک فایل ساده rt.jar که حاوی تمام خصوصیات جاوا است هم در آن وجود ندارد و به عنوان ماژول‌های کوچک و مجزا دوباره سازی شده است. این بدان معناست که شما میتوانید اجرا‌های سفارشی خود را تنها در بخش‌هایی داشته باشید که قسمت‌هایی از JDK استفاده شده در ماژول شما را شامل میشوند. وقتی شما یک فایل JAR ماژول جاوا داشته باشید میتوانید با استفاده از ابزار JLink در JDK یک اجرا تولید کنید :

jlink –module-path <modulepath> –add-modules
<modules> –limit-modules <modules> –output <path>

شما میتوانید برای یافتن ماژول‌های مورد نیازی که ماژول شما از آن استفاده میکند از ابزار jdeps استفاده کنید. محض اطلاع شما گفتنی است که اجرای JDK 9 استاندارد برای یک برنامه بسیار ساده حدود ۴۳۰ مگابایت و اجرای ایجاد شده توسط دستور بالا حدود ۲۴ مگابایت فضا اشغال خواهد کرد که برای دستگاه‌هایی که محدودیت حافظه دارند یا دیگر موارد را شامل میشوند عالی به نظر میرسد.

 

روش‌های شخصی داخل رابط کاربری
جاوا ۸ قابلیت‌هایی را معرفی کرد که شما به واسطه آنها میتوانستید عملکرد پیش فرض اجرایی و داخلی یک رابط کاربری را داشته باشید اما تمامی این عملکرد‌های اجرایی مانند روش‌های عمومی رفتار میکردند.
خوشبختانه حالا شما میتوانید داخل رابط کاربری روش‌هایی شخصی داشته باشید که میتوان از آنها برای سازماندهی بهتر کد‌ها توسط روش‌های پیش فرض استفاده کرد.

public interface Car {
void setCarColor(String color);// normal interface method
default void startCar () {
// default method
System.out.println(“Car is starting…”);
startEngine();
System.out.println(“Car started! “);
}
private void startEngine() {
// Private method not available outside the interface as
an API
System.out.println(“Engine Started “);
}
}

 

قابلیت JShell : REPL فعل و انفعالی جاوا
مثل Python ، PHP و چندین زبان برنامه نویسی دیگر حال جاوا نیز از یک Read-Eval-Print-Loop بهره مند گشته است. برای شروع تنها jshell را در کنسول وارد کنید و سپس کد جاوای مورد نظر خود را تایپ کنید :

C:\Program Files\Java\jdk-9\bin>jshell
| Welcome to JShell — Version 9-ea
| For an introduction type: /help intro
jshell> int x= 10
x ==> 10
jshell> System.out.println(“value of x is: “+ x);
value of x is: 10

غیر اکتسابی بودن HTTP/2 و حفره‌های وب
بلاخره HttpURLConnection کهنه و قدیمی در جاوا ۹ جای خود را به HttpClient داد که پشتیبانی بسیاری برای پروتکل HTTP/2، حفره‌های وب و غیره فراهم میکند.

HttpClient client = HttpClient.newHttpClient();
HttpRequest req =
HttpRequest.newBuilder(URI.create(“http://metalop.
com”))
.header(“User-Agent”,”Java”)
.GET()
.build();
HttpResponse<String> response = client.send(req,
HttpResponse.BodyHandler.asString());
System.out.println(response.statusCode());
System.out.println(response.body());

 

زیباست، اینطور نیست؟ بدون وجود InputStream یا Reader که به جای آنها API به ما پیشنهاد استفاده از BodyHandler را میدهد که به واسطه آن میتوانیم رشته را مستقیما از پاسخگویی آن بخوانیم.

 

افزایش توضیح نویسی در @Deprecated
توضیح نویسی کوچک یکی از سه توضیح نویسی اولیه و درونی جاوا بوده است ، با گذر سالها کاربران متوجه شدند که این امر ماهیتی نامشخص و مبهم دارد چرا که اطلاعات بسیاری را فراهم نمیکند ، مانند اینکه چرا مقیاس چیزی کوچک در نظر گرفته شده : آیا میتوان آنرا مورد استفاده قرار داد یا اینکه در نسخه‌های آینده آنرا حذف کرد و در صورت حذف کردن این مورد ممکن است در چه نسخه‌ای دوباره مورد استفاده قرار گیرد و غیره. با این حال اکنون به توضیح نویسی کوچک حوزه‌های بیشتری مانند forRemoval افزوده شده تا راحتی تجربه استفاده بالاتر برود. به موجب مورد یاد شده افزونه دیگری نیز وجود دارد ، اگر شما از یک دسته‌بندی کوچک شده و هشداری موقوف شده استفاده میکنید ، هنوز هم هشداری برای شما باقی میماند که قبلا به شکل اعلامیه‌ای نمایش داده میشد و هیچ راهی برای کوچک ساختن این اعلامیه وجود نداشت ، این موضوع نیز در جاوا ۹ رفع شده است.

 

فایل‌های چند خصوصیتی JAR
فایل‌های چند خصوصیتی نسخه‌ای از دسته‌بندی‌های بخصوص و منابع مختلف، حالا میتوانند در یک فایل JAR کنار یکدیگر قرار بگیرند ، این مسئله خبر خوبی برای مرتب‌کنندگان بایگانی محسوب میشود چراکه نیازی به استفاده از زیر مجموعه API فراهم شده توسط نسخه‌های قدیمی‌تر جاوا نیست.
فایل JAR فایل چند خصوصیتی است که ورودی MANIFEST.MF را نیز شامل میشود که دقیقا در بخش اصلی آن جای دارد. همچنین META-INF شامل نسخه‌ای با بخشی فرعی میشود که به صورت یکپارچه (برای جاوا ۹) با عدد ۹ شروع میشود. در ادامه میتوانید کد آن را مشاهده کنید :

JAR content rootA.class
B.class
C.class
D.class
META-INF
MANIFEST.MF
versions
۹
A.class
B.class

اگر این فایل JAR توسط JDK 9 خوانده شود از دسته‌بندی های A و B برای جاوا ۹ که داخل ۹ directory قرار دارد استفاده میکند اما اگر توسط نسخ قدیمی تر از جاوا ۹ خوانده شود، دسته‌بندی‌ها مستقیما از کد پایه آن خوانده میشوند.

 

دیگر به ‌روز رسانی‌های جاوا ۹
جاوا ۹ چندین به روز رسانی دیگر نیز در خود دارد. برای مثال JavaDocs اکنون از HTML 5 و خصوصیت جستجو پشتیبانی میکند، همچنین روش‌های جدیدی به رابط کاربری Stream افزوده شده که میتوان از میان آنها به dropWhile takeWhile و ofNullable اشاره کرد. همینطور روش تکرار مداوم حالا به شما اجازه میدهد تا دستورات را در هنگام تکرار مبنا قرار دهید.

IntStream.iterate(1, i -> i <=10, i -> i + 1).forEach(System.
out::println);

مجموعه framework نیز اکنون طوری به روز رسانی شده که بتوانید گروهی از مجموعه‌ها را در زمان نوشتن کد‌ها همانند آنچه که در زیر آمده داشته باشید :

List<Integer> integers = List.of(1, 2, 3);

هنوز چندین خصوصیت جدید دیگر در جاوا ۹ وجود دارند و میتوانید برای دریافت فهرست جامع‌ و فراگیر‌تری از آنها سری به آدرس زیر بزنید :

https://docs.oracle.com/javase/9/whatsnew/toc.htm

 

نظر بدهید

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

It is main inner container footer text