آخرین ویرایش جاوا، در میان سایر پیشرفتها، چند نحو مفید برای رکوردها معرفی میکند.
دنیای برنامه نویسی جاوا به طور مداوم در حال تحول است و شما را ملزم می کند که به روز باشید تا در حرفه خود برتر باشید.
جاوا 21 موجی از پیشرفت های هیجان انگیز را به ارمغان می آورد که نحوه رویکرد شما به همزمانی، عملیات جمع آوری و کار با رکوردها را متحول می کند.
معرفی رشته های مجازی
مقیاسپذیری برنامههای سرور همیشه با چالشهایی همراه بوده است که موضوعات اغلب به گلوگاه تبدیل میشوند. تعداد محدود رشته ها، همراه با انتظار مکرر برای رفع انسداد رویدادها یا قفل ها، مانع عملکرد کلی می شود.
در گذشته، پرداختن به این موضوع شامل استفاده از ساختارهایی مانند CompletableFuture یا چارچوبهای واکنشی بود که منجر به ایجاد کدهای پیچیدهای شد که درک و نگهداری آن دشوار بود.
خوشبختانه جاوا 19 رشته های مجازی را به عنوان یک ویژگی پیش نمایش معرفی کرد که جاوا 21 آن را از طریق JDK Enhancement Proposal 444 اصلاح و تثبیت کرده است.
رشتههای مجازی جایگزین بسیار امیدوارکنندهای را ارائه میدهند و به شما امکان میدهند با چالشهای مقیاسپذیری به طور مؤثرتری مقابله کنید. این منجر به بهبود عملکرد و افزایش پاسخگویی برنامه های سرور می شود.
مجموعه های دنباله دار بیشتر قابل استفاده هستند
به طور سنتی، استفاده از لیست های پیوندی در برنامه نویسی جاوا نیاز به کد کاملاً مفصلی دارد. به عنوان مثال، برای واکشی آخرین عنصر، باید از این روش دست و پا گیر استفاده کنید:
var last = list.get(list.size() - 1);
با این حال، جاوا 21 یک جایگزین مختصر و ظریف را معرفی می کند:
var last = list.getLast();
به طور مشابه، دسترسی به اولین عنصر LinkedHashSet نیاز به یک مسیر دوربرگردان دارد:
var first = linkedHashSet.iterator().next();
اما با جاوا 21، این کار بسیار ساده تر می شود:
var first = linkedHashSet.getFirst();
همچنین می توانید با استفاده از متد جدید getLast به آخرین عنصر LinkedHashSet دسترسی داشته باشید که از تکرار در کل مجموعه جلوگیری می کند.
این پیشرفتها در مجموعههای متوالی نه تنها خوانایی کد را افزایش میدهند، بلکه بازیابی عناصر را ساده میکنند و برنامهنویسی جاوا را کارآمدتر و توسعهدهندهتر میکنند.
الگوهای ضبط برای راحتی
Record Patterns که به عنوان یک ویژگی پیش نمایش در جاوا 19 معرفی شده است، مکانیزمی مناسب برای دسترسی به فیلدهای یک رکورد در جاوا بدون نیاز به کست های واضح یا روش های دسترسی ارائه می دهد.
آنها با Pattern Matching به عنوان مثال و Pattern Matching برای سوئیچ هم افزایی می کنند که به طور قابل توجهی کد را ساده کرده و خوانایی کلی را افزایش می دهد.
در اینجا تصویری از این مفهوم با یک رکورد ساده به نام Position آورده شده است:
public record Position(int x, int y) {}
قبلاً، انجام اقدامات مختلف بر اساس کلاس یک شیء مورد نیاز با استفاده از Pattern Matching به عنوان مثال از، همانطور که در قطعه کد زیر نشان داده شده است:
public void print(Object o) {
if (o instanceof Position p) {
System.out.printf("o is a position: %d/%d%n", p.x(), p.y());
} else if (o instanceof String s) {
System.out.printf("o is a string: %s%n", s);
} else {
System.out.printf("o is something else: %s%n", o);
}
}
با Record Patterns، اکنون می توانید به جای استفاده از الگوی Position p، یک الگوی رکورد مانند Position (int x، int y) را مستقیماً مطابقت دهید. این به شما امکان می دهد مستقیماً به متغیرهای x و y در کد دسترسی داشته باشید و نیازی به p.x() و p.y() را از بین ببرید:
public void print(Object o) {
if (o instanceof Position(int x, int y)) {
System.out.printf("o is a position: %d/%d%n", x, y);
} else if (o instanceof String s) {
System.out.printf("o is a string: %s%n", s);
} else {
System.out.printf("o is something else: %s%n", o);
}
}
علاوه بر این، می توانید از Record Patterns همراه با Pattern Matching برای سوئیچ استفاده کنید تا کد خود را ساده تر کنید:
public void print(Object o) {
switch (o) {
case Position(int x, int y) - > System.out.printf("o is a position: %d/%d%n", x, y);
case String s - > System.out.printf("o is a string: %s%n", s);
default - > System.out.printf("o is something else: %s%n", o);
}
}
الگوهای ضبط تودرتو به شما امکان می دهد روی رکوردهایی که فیلدهای آنها رکورد هستند مطابقت دهید. به عنوان مثال، رکوردی به نام Path را در نظر بگیرید که دارای یک موقعیت از و به سمت است:
public record Path(Position from, Position to) {}
با استفاده از الگوهای رکورد، چاپ یک شی Path مختصرتر می شود:
public void print(Object o) {
switch (o) {
case Path(Position from, Position to) - > System.out.printf("o is a path: %d/%d -> %d/%d%n", from.x(), from.y(), to.x(), to.y());
// other cases
}
}
با کمک الگوهای ضبط، مدیریت رکوردها با فیلدهای مختلف آشکارتر و خواناتر می شود. فرض کنید رکوردهای Position2D و Position3D را تغییر داده اید، جایی که Position یک رابط جاوا است که هر دو پیاده سازی می کنند:
public sealed interface Position permits Position2D, Position3D {}
public record Position2D(int x, int y) implements Position {}
public record Position3D(int x, int y, int z) implements Position {}
public record Path < P extends Position > (P from, P to) {}
برای متمایز کردن رفتار چاپ برای مسیرهای دو بعدی و سه بعدی، می توانید از الگوهای ضبط استفاده کنید:
public void print(Object o) {
switch (o) {
case Path(Position2D from, Position2D to) - > System.out.printf("o is a 2D path: %d/%d -> %d/%d%n", from.x(), from.y(), to.x(), to.y());
case Path(Position3D from, Position3D to) - > System.out.printf("o is a 3D path: %d/%d/%d -> %d/%d/%d%n", from.x(), from.y(), from.z(), to.x(), to.y(), to.z());
// other cases
}
}
الگوهای ضبط به طور قابل توجهی پرحرفی را کاهش می دهند و خوانایی کد را در هنگام برخورد با رکوردهایی حاوی فیلدهای مختلف افزایش می دهند.
قفل امکانات جدید را با جاوا 21 باز کنید
جاوا 21 مجموعه ای از ویژگی های قدرتمند را معرفی می کند که قابلیت های زبان برنامه نویسی جاوا را افزایش می دهد. با پذیرش این پیشرفتها، میتوانید فرآیندهای توسعه خود را ساده کنید و امکانات جدیدی را برای برنامههای خود باز کنید.
بهروز ماندن با جدیدترین ویژگیهای زبان و چارچوبهای جاوا به شما این امکان را میدهد تا کد کارآمد و قابل نگهداری را حفظ کنید و این اطمینان را به شما میدهد که در برنامهنویسی جاوا پیشتاز باشید.