ویژگیهای جدید مانند var، کامپایل خودکار، بلوکهای متن، کلاسهای رکورد و موارد دیگر جاوا را به روشهای ظریف اما قدرتمند به سمت آیندهای انعطافپذیرتر و پویاتر تغییر میدهند.
- var
- تلفیقی پنهان
- کامپایل خودکار چندین فایل منبع
- یک زنجیره ابزار ساخت بهتر
- JShell
- سرور وب ساده
- بلوکهای متن تودرتو
- ثبت کلاسها
- همزمانی ساختاریافته
- نتیجهگیری
جاوا در چند سال گذشته تغییرات بزرگی ایجاد کرده است، زیرا نیروهای ظاهراً متفاوت برای سهولت استفاده از پلتفرم همگرا شدهاند. ویژگیهای جدید مانند کامپایل خودکار و var keyword نوار استفاده از جاوا را برای مبتدیان و کهنه کارها به طور یکسان کاهش دهید. بیایید نگاهی به آشپزی در این جاوا جدید و دوستانه بیاندازیم.
var
شاید شگفتانگیزترین چیز در مورد جاوای مدرن، حداقل برای افراد قدیمی، وجود پشتیبانی var
باشد. یکی از مشخصه های جاوا این است که به شدت تایپ شده است، اما var
کمی آن را کم می کند. در یک متد، اکنون می توانید با استفاده از var
یک مرجع تعریف کنید که در آن کامپایلر نوع آن را برای شما پیگیری می کند.
بعد از کش و قوسهای فراوان در مورد حکمت معرفی این ویژگی، توسعهدهندگان جاوا در همه جا به سادگی از آن استفاده کردهاند که گویی بدیهیترین چیزی است که تا کنون وجود داشته است. آیا جاوا همیشه به ما اجازه این کار را نمی داد؟
var numbers = new ArrayList<Integer>();
نه، نشد!
تلفیقی پنهان
این ویژگی جدید تقریباً مانند اجرای یک فایل منبع بدون کامپایل آن به نظر میرسد، اما آنچه در زیر سرپوش اتفاق میافتد کمی پیچیدهتر است. فایل java. هنوز کامپایل شده است، اما JEP 330 باعث میشود که همه چیز از شما پنهان شود. بنابراین اکنون می توانید انجام دهید:
$ java HelloWorld.java
به جای
$ javac HelloWorld.java
$ java HelloWorld
runner منبع را در حافظه کامپایل می کند و اولین کلاس اصلی را که کشف می کند اجرا می کند.
JEP 330 محدود به یک فایل منبع است، اما منتظر بمانید، زیرا JEP 458 در اینجا آمده است.
کامپایل خودکار چندین فایل منبع
JEP 458 به JEP 330 می پیوندد تا به توسعه دهندگان اجازه دهد چندین فایل منبع را با کامپایل مخفی اجرا کنند. هنگامی که یک منبع جاوا به منبع دیگری ارجاع میدهد، راهانداز جاوا وابستگی را در حافظه کامپایل میکند، آن را بارگذاری میکند و ارائه میکند. به طور خلاصه، میتوانید کل برنامههای فایلهای منبع مرتبط را اجرا کنید، تا زمانی که روی دیسک با هم وجود داشته باشند، بدون یک مرحله کامپایل صریح.
این من هستم یا جاوا در حال تبدیل شدن به چیزی پویاتر است؟ این خیلی جالب است.
یک زنجیره ابزار ساخت بهتر
در مقدمه JEP 458 آمده است:
این به زبان ساده می گوید که جاوا در تلاش است تا زندگی توسعه دهندگان را از طریق ساخت های بهتر ساده کند. JEP حتی تا آنجا پیش میرود که میگوید «هدف سهولت استفاده از وابستگیهای کتابخانه خارجی در برنامههای کد منبع نیست»، اگرچه «ممکن است موضوع یک JEP آینده باشد». (مورب مال من).
من در اینجا میدانم که توسعهدهندگان جاوا در حال کار بر روی آسانتر کردن استفاده از ابزار، حتی تا سطح وابستگی هستند—بالاخره! Maven همچنان ابزار ساخت من برای پروژههای پیچیده است. ۱۵ سال است، اما این ابزار علائم جدی سن را نشان می دهد. (یک پروژه کهن الگوی جدید در Maven جاوا ۱.۷ را به عنوان پیشفرض انتخاب میکند!) در مقایسه با NPM، Maven کاملاً بد است. یک مانع واقعی برای شروع سریع پروژه ها – به ویژه برای مبتدیانی که باید ابزار ساخت را یاد بگیرند و در عین حال جاوا را نیز یاد بگیرند.
مدیر وابستگی تعیین شده توسط پلتفرم میتواند چیزی باشد. وقتی به JEP 330 و JEP 458 با هم نگاه میکنم، میبینم که چسبهای تکه تکهای برای قابلیت استفاده ابزار نیست، بلکه میبینم که از یک زنجیره ابزار یکپارچه و درون پلتفرم بیرون آمده است. چیزی که در حال ظهور است یک زنجیره ابزار جاوا است که برای آسان کردن شروع یک پروژه و استفاده تدریجی از ابزارهای پیچیده تر در صورت نیاز طراحی شده است.
JShell
میدانم، JShell مدتهاست که وجود دارد، اما بیایید تصدیق کنیم که چقدر خوب است برای داشتن یک runner به سبک REPL برای جاوا. به یاد داشته باشید که از JShell برای آزمایش ایده های جدید در پرواز استفاده کنید.
سرور وب ساده
یک روز از خواب بیدار شدیم و جاوا یک سرور وب خط فرمان داشت. میتوانید همه چیز را در مورد وب سرور ساده جاوا در اینجا بیاموزید.
نکته کلیدی این است: اگر از جاوا ۱۸ یا بالاتر استفاده می کنید، نصب JDK شما اکنون شامل یک راه ساده و آسان برای ارائه فایل ها می شود. در نتیجه، پلتفرم جاوا کمی تک مرحله ای تر، یکپارچه تر و کامل تر است. من قبلاً از Python یا Node برای نیازهای اولیه سرویس دهی فایل استفاده کرده ام. اکنون، من فقط می توانم همه این کارها را در جاوا انجام دهم.
بلوکهای متن تودرتو
یکی دیگر از ویژگیهایی که توسعهدهندگان جاوا مدتهاست در پلتفرمهای دیگر به آن حسادت میکردند، راهی آسان برای مدیریت تکههای بزرگ متن در کد بود. JEP 378 بلوک های متنی را که ما به دنبال آن بودیم می آورد:
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
من شما را نمیدانم، اما این بلوک نفس راحتی به من میدهد.
بلوکهای متنی همچنین میتوانند آزادانه کاراکترها را نقل قول کنند:
String html = """
<html>
<body>
<p>Hello, "This is a quote"</p>
</body>
</html>
""";
ثبت کلاس ها
محصول JEP 395، کلمه کلیدی record
، به شما امکان می دهد یک POJO (شیء قدیمی جاوای ساده) بدون افزودن دستی گیرنده، تنظیم کننده، toString
، ایجاد کنید. برابر با روشهای
و hashcode
همانطور که معمولاً انجام میدهید. وقتی از record
استفاده میکنید، پلتفرم تمام این ویژگیها را برای شما اضافه میکند:
class Point {
private final int x;
private final int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
int x() { return x; }
int y() { return y; }
public boolean equals(Object o) {
if (!(o instanceof Point)) return false;
Point other = (Point) o;
return other.x == x && other.y == y;
}
public int hashCode() {
return Objects.hash(x, y);
}
public String toString() {
return String.format("Point[x=%d, y=%d]", x, y);
}
}
می شود:
record Point(int x, int y) { }
کلاسهای جدید record
همچنین امکان سفارشیسازی زیادی را فراهم میکنند، بنابراین میتوانید هر چقدر که میخواهید اضافه کنید.
سوئیچ جدید و بهبود یافته
با JEP 361، نحو switch
جاوا قدرتمندتر و استفاده آسان تر شد. این به دو صورت اتفاق افتاد: یک نحو تمیزتر و توانایی استفاده از switch
به عنوان یک عبارت و نه فقط یک عبارت.
سوئیچ اکنون این امکان را فراهم میکند که نحو قدیمی را به شکل زیر درآورید:
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
و آن را به چیزی شبیه به این تبدیل کنید:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
به همان اندازه عالی است، میتوانید از آن بهعنوان عبارتی برای انتساب متغیر استفاده کنید (به هر حال، اغلب تمام چیزی است که ما دنبالش هستیم):
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
همزمانی ساختاریافته
اکنون، همزمانی هرگز یک منطقه خوش شانس کدنویسی نخواهد بود. چیزی ذاتاً در مورد کار کردن با چندین رشته وجود دارد. با این وجود، همزمانی ساختاریافته احتمالاً ساده ترین راه را برای مدیریت همزمانی در جهان کدنویسی شناخته شده به شما می دهد:
try (var scope = new StructuredTaskScope<Object>()) {
for (int planetId : planetIds) {
scope.fork(() -> getPlanet(planetId)); // fork a “process”
}
scope.join();
} catch (Exception e){
System.out.println("Error: " + e);
}
وقتی با رشتههای مجازی جدید جاوا ترکیب میشود، همزمانی ساختاریافته یک ابرقدرت در میان زبانها است. اکنون، میتوانید به راحتی از همزمانی در جاوا استفاده کنید، بدون ایجاد رشتههای سیستم عامل، و بدون ترک کردن ساختارهای برنامهنویسی معمولی.
درباره همزمانی ساختاریافته بیشتر بیاموزید
برای آشنایی بیشتر با رویکرد جدید جاوا برای همزمانی، شروع به کار با مدل جدید همزمانی ساختاریافته جاوا را ببینید.
نتیجه گیری
توسعهدهندگان پلتفرم در چندین جبهه کار میکنند تا نوار را برای توسعهدهندگانی که در جاوا کار میکنند پایین بیاورند. آنها زندگی روزمره کدنویسهای فعال را بهبود میبخشند و شروع کار با جاوا و آزمایش آن را آسانتر میکنند.
این تلاشها بهویژه در آن جیب عجیب دنیای توسعهدهندگان که من آن را «نمونهسازی اولیه» مینامم، تأثیرگذار هستند، که در غیر این صورت به عنوان «بازی در اطراف» شناخته میشود. هر چه بیشتر بتوانیم برای کاهش فاصله بین فکر کردن به امتحان کردن چیزی و تلاش واقعی آن انجام دهیم، بهتر است.
دیدن جاوا به این شکل عالی است. من مسیری را که به سمت آن حرکت می کند و افرادی که این تلاش ها را هدایت می کنند، دوست دارم.
پست های مرتبط
با جنبه جدید و نرم تر جاوا راحت شوید
با جنبه جدید و نرم تر جاوا راحت شوید
با جنبه جدید و نرم تر جاوا راحت شوید