JavaRush /جاوا بلاگ /Random-UR /جاوا 13: نئی خصوصیات

جاوا 13: نئی خصوصیات

گروپ میں شائع ہوا۔
ہم پہلے ہی اس حقیقت کے عادی ہو چکے ہیں کہ ہر چھ ماہ بعد ایک نئی JDK ریلیز ظاہر ہوتی ہے۔ اب تک، اس نقطہ نظر نے اپنے آپ کو درست ثابت کیا ہے، اور کچھ ڈویلپرز کی تشویش کہ وہ اپ ڈیٹس کو برقرار نہیں رکھیں گے، بیکار رہے ہیں: چھ ماہ کی چند تبدیلیاں ہیں اور وہ پہلے کی طرح عالمی نہیں ہیں۔ ٹھیک ہے، نوسکھئیے پروگرامرز اس جدت کو بالکل بھی محسوس نہیں کر سکتے ہیں۔ جاوا 13: نئی خصوصیات - 1تاہم، مستقبل کے سافٹ ویئر ڈویلپرز کے لیے بہتر ہے کہ وہ اختراعات سے باخبر رہیں۔ اس مضمون میں، ہم روایتی طور پر منظور شدہ توسیعی تجاویز (JEPs) کو بیان کریں گے۔ جاوا 13 میں صرف پانچ JEPs اور 76 نئے بنیادی لائبریری عناصر شامل ہیں (جن میں سے تقریباً نصف java.io پیکیج میں سادہ اضافہ ہیں)۔

JEP 355 : ٹیکسٹ بلاکس (پیش نظارہ)

آئیے زبان کے نحو کو تبدیل کرکے شروع کرتے ہیں۔ ان میں سب سے اہم ٹیکسٹ بلاکس ہیں۔ وہ آپ کو کرداروں سے فرار ہونے سے بچنے اور تاروں کو فارمیٹ کرنے کا طریقہ جاننے کی اجازت دیتے ہیں۔ آپ کو یاد ہوگا کہ JDK 12 میں سٹرنگ لٹریلز کے ساتھ کام کرنے کے لیے متوقع Raw String Literals (JEP 326) خصوصیت شامل نہیں تھی۔ جاوا 13 میں، اسے JEP 355 نے اس کے ٹیکسٹ بلاکس کے ساتھ تبدیل کر دیا تھا۔ آپ کو شاید یاد ہوگا کہ جاوا میں، ایک تار ڈبل کوٹس میں لپیٹا جاتا ہے۔ یہ اچھی بات ہے، لیکن مسئلہ یہ ہے کہ ایک لائن سورس فائل کی ایک سے زیادہ لائنوں پر قبضہ نہیں کر سکتی (جاوا لائن کے ساتھ الجھن سے بچنے کے لیے، یہاں ہم فائل لائن کو "لائن" کہیں گے)۔ ٹھیک ہے، آئیے ارد گرد چلتے ہیں اور استعمال کرتے ہیں، مثال کے طور پر، علامت \nاگر وقفے کی ضرورت ہو، یا ملٹی لائن ایکسپریشنز کا مجموعہ۔ یہ بہت اچھی طرح سے نہیں نکلتا ہے! ایمبیڈڈ HTML، XML، SQL، یا JSON ٹکڑوں کے ساتھ ٹیکسٹ لٹریلز خاص طور پر بوجھل ہوتے ہیں۔ یہ سب فرار، جوڑنا، اور دستی ترمیم کوڈ کو لکھنے میں تکلیف اور پڑھنے میں مشکل بناتی ہے۔ ٹیکسٹ بلاکس اس مسئلے کو حل کرنے کی کوشش کرتے ہیں۔ وہ اہ... ٹرپل ڈبل اقتباسات کے ساتھ شروع کرتے ہیں اور ان کے ساتھ ختم ہوتے ہیں (میں جانتا ہوں، یہ بہت اچھا نہیں لگتا ہے)۔ اقتباسات کے درمیان ہر چیز کو لائن کے حصے کے طور پر سمجھا جاتا ہے، بشمول نئی لائنیں۔ ٹیکسٹ بلاکس کو بالکل ویسا ہی استعمال کیا جا سکتا ہے جیسا کہ معیاری ٹیکسٹ لٹریلز، اور جاوا اسی طرح کوڈ کو مرتب کرے گا۔ ابتدائی اقتباسات کے بعد ایک لائن ڈیلیمیٹر ہونا ضروری ہے۔ ٹیکسٹ بلاکس کو ایک لائن میں استعمال نہیں کیا جا سکتا، لہذا کوڈ
String smallBlock = """Only one line""";
مندرجہ ذیل غلطیوں کی قیادت کریں گے:
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                          ^
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                                   	^
ایک سادہ HTML ٹکڑا اب اس طرح لکھا جا سکتا ہے:
String htmlBlock = """
               	<html>
                 	<body>
                   	<p>CodeGym Web page</p>
                 	</body>
               	<html>
         	     """;
آئیے چند باریکیوں کا تذکرہ کرتے ہیں جو ٹیکسٹ بلاکس کا استعمال کرتے وقت آگاہ رہیں۔ اختتامی اقتباسات کی جگہ کا تعین اہم ثابت ہوتا ہے: یہ طے کرتا ہے کہ کبھی کبھار سفید جگہ کو کیسے ہینڈل کیا جاتا ہے۔ اوپر دی گئی مثال میں، اختتامی اقتباسات HTML متن کے انڈینٹیشن کے ساتھ منسلک ہیں۔ اس صورت میں، مرتب کرنے والا انڈینٹیشن خالی جگہوں کو ہٹا دے گا، اور اس کے نتیجے میں ہمیں اس طرح کی ایک لائن ملے گی:
<html>
  <body>
    <p>My web page</p>
  </body>
</html>
نوٹ:اس طرح کی لائن لائن کے آخر میں ایک نئی لائن پر مشتمل ہوگی۔ اگر اس کی ضرورت نہیں ہے تو، بند ہونے والے اقتباسات """ کو براہ راست </html> ٹیگ کے بعد رکھا جا سکتا ہے۔ اگر ہم اختتامی اقتباسات کو بائیں مارجن کے قریب لے جاتے ہیں، تو اس سے ہٹائے جانے والے انڈینٹیشن کی مقدار بدل جائے گی۔ اگر ہم انہیں دو خالی جگہیں بائیں طرف منتقل کرتے ہیں، تو ہم ہر لائن لائن میں انڈینٹیشن کے لیے دو جگہیں شامل کریں گے۔ بائیں کنارے پر جانے سے تمام پیڈنگ محفوظ ہو جائیں گی۔ اقتباسات کو مزید دائیں جانب منتقل کرنے سے کوئی اثر نہیں پڑے گا اور مزید انڈینٹیشن شامل نہیں ہوگی۔ ٹیکسٹ بلاکس کو JDK 13 میں پیش نظارہ خصوصیت کے طور پر شامل کیا گیا تھا۔ اس کا مطلب ہے کہ وہ ابھی تک متعلقہ جاوا زبان کی تفصیلات میں شامل نہیں ہیں۔ یعنی یہ واضح نہیں ہے کہ آیا یہ فیچر زبان کا مستقل حصہ بن جائے گا یا یہ یہاں صرف مہمان ہے۔ فی الحال، ڈویلپر اس خصوصیت کی جانچ کر سکتے ہیں اور اس پر اپنی رائے دے سکتے ہیں۔ ٹیکسٹ بلاکس کی قسمت اس پر منحصر ہوگی: خصوصیت کو بہتر بنایا جاسکتا ہے، اور اگر آپ اسے پسند نہیں کرتے ہیں، تو اسے مکمل طور پر ہٹا دیا جاسکتا ہے۔ اگر آپ عملی طور پر ٹیکسٹ بلاکس کو آزمانا چاہتے ہیں تو یاد رکھیں کہ مرتب کرنے اور چلانے کے لیے پیش نظارہ خصوصیات کو واضح طور پر شامل کیا جانا چاہیے۔ تالیف:

javac --enable-preview --release 13 TextBlock.java
ایپلیکیشن چلانے کے لیے، آپ کو پیش نظارہ خصوصیات کو فعال کرنے کی ضرورت ہے:

java --enable-preview TextBlock
کلاس Stringمیں تین نئے طریقے ہیں جو اس زبان کی تبدیلی کی تکمیل کرتے ہیں:
  • formatted(): سٹرنگ کو فارمیٹ سٹرنگ کے طور پر خود سٹرنگ کا استعمال کرتے ہوئے فارمیٹ کریں۔ ایک چیلنج کے برابرformat(this, args)
  • stripIndent(): سٹرنگ سے بے ترتیب خالی جگہوں کو ہٹاتا ہے۔ یہ مفید ہے اگر آپ ملٹی لائن سٹرنگز پڑھ رہے ہیں اور وہی خالی جگہ کا اخراج لاگو کرنا چاہتے ہیں جیسا کہ آپ واضح اعلان کے ساتھ کریں گے۔
  • translateEscapes(): فرار کی ترتیب کے ساتھ ایک سٹرنگ لوٹاتا ہے (جیسے \ r)، مناسب یونیکوڈ قدر میں ترجمہ کیا جاتا ہے۔
یہ دلچسپ ہے کہ یہ طریقے ابھی نمودار ہوئے ہیں، لیکن پہلے ہی فرسودہ کے طور پر نشان زد ہیں ... معاملات کی یہ حالت بتاتی ہے کہ JDK کے مستقبل کے ورژن میں انہیں ہٹا دیا جا سکتا ہے۔ ایک نیا طریقہ شامل کرنا اور اسے فوری طور پر ترک کرنا تھوڑا سنکی لگتا ہے۔ تاہم، براہ کرم نوٹ کریں کہ یہ طریقے ایک پیش نظارہ خصوصیت سے وابستہ ہیں جسے تبدیل یا ہٹایا جا سکتا ہے۔ شاید ایک تشریح متعارف کرانے سے @PreviewFeatureاس طرح کے حالات میں مدد ملے گی، لیکن یہ ابھی تک JDK میں شامل نہیں ہے (حالانکہ یہ JDK 14 میں ظاہر ہوگا)۔

JEP 354 : سوئچ ایکسپریشن (پیش نظارہ)

Java 12 نے ایک سوئچ اسٹیٹمنٹ - JEP 325 کے ساتھ تحریری اظہار کی ایک نئی شکل کی تجویز پیش کی ۔ یہ بالکل پہلا پیش نظارہ فیچر نکلا اور اس کی قسمت ثابت کرتی ہے کہ صارفین کو تجاویز پیش کرنا ایک بہترین آئیڈیا ہے۔ JDK 12 سے پہلے، switchاسے صرف ایک بیان کے طور پر استعمال کیا جا سکتا ہے جو ایک کارروائی کرتا ہے لیکن نتیجہ واپس نہیں کرتا ہے۔ لیکن جاوا 12 میں اس نے اسے اظہار کے طور پر استعمال کرنے کی اجازت دی switchجو ایک نتیجہ واپس کرتا ہے جو متغیر کو تفویض کیا جاسکتا ہے۔ کیس کے بیانات کے نحو میں دیگر تبدیلیاں تھیں switch۔ آئیے یہ سمجھنے کے لیے جے ای پی کی ایک مثال دیکھیں کہ یہ کیسے کام کرتا ہے۔
int numberOfLetters;
switch(dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
    numberOfLetter = 6;
    break;
  case TUESDAY
    numberOfLetter = 7;
    break;
  case THURSDAY
  case SATURDAY
    numberOfLetter = 8;
    break;
  case WEDNESDAY
    numberOfLetter = 9;
    break;
  default:
   throw new IllegalStateException("Huh?: " + day);
}
اس مثال میں، ہم dayOfWeekقدر کو تفویض کرنے کے لیے قدر کا استعمال کرتے ہیں numberOfLetters۔ آپریٹر کے کام کی خصوصیات کی وجہ سے switch، یہ کوڈ سب سے خوبصورت نہیں ہے اور غلطیاں کرنا آسان ہے۔ سب سے پہلے، اگر ہم کیس لیبلز کے ہر گروپ پر ایک اسٹیٹمنٹ لاگو کرنا بھول جاتے ہیں break، تو ہم کیس لیبلز کے اگلے گروپ پر ڈیفالٹ ہوجائیں گے۔ اس سے غلطیاں پیدا ہو سکتی ہیں جن کو تلاش کرنا مشکل ہے۔ دوسرا، ہمیں کیس لیبلز کے ہر گروپ کی وضاحت کرنی چاہیے۔ اگر ہم بھول جاتے ہیں، تو یقیناً ہمیں ایک کمپائلر ایرر ملے گا، تاہم، یہ آپشن مثالی نہیں ہے۔ ہمارا کوڈ بھی کافی لفظی ہے کیونکہ ہر قدر کا dayOfWeekاپنا کیس لیبل ہونا ضروری ہے۔ نئے نحو کا استعمال کرتے ہوئے، ہمیں بہت صاف اور کم غلطی کا شکار کوڈ ملتا ہے:
int numberOfLetters = switch (dayOfWeek) {
   case MONDAY, FRIDAY, SUNDAY -> 6;
   case TUESDAY -> 7;
   case THURSDAY, SATURDAY -> 8;
   case WEDNESDAY -> 9;
   default -> throw new IllegalStateException("Huh?: " + day);
};
اب ہمیں اسائنمنٹ صرف ایک بار کرنے کی ضرورت ہے (اظہار کی واپسی کی switchقیمت سے) اور کیس لیبلز کے لیے کوما سے الگ کردہ فہرست استعمال کر سکتے ہیں۔ اور، چونکہ ہم آپریٹر کا استعمال نہیں کرتے ہیں break، ہم اس سے منسلک مسائل کو ختم کرتے ہیں۔ اظہار نحو switchہمیں پرانے طرز کا نحو استعمال کرنے کی اجازت دیتا ہے، لہذا JDK 12 میں ہم اسے اس طرح لکھ سکتے ہیں:
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   break 6;
  case TUESDAY
   break 7;
  case THURSDAY
  case SATURDAY
   break 8;
  case WEDNESDAY
   break 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
جاوا کمیونٹی کے مطابق، breakواپسی کی قیمت کی وضاحت کے لیے اوور لوڈنگ کا استعمال الجھن کا باعث ہو سکتا ہے۔ جاوا زبان آپ کو غیر مشروط جمپ آپریٹر جیسے لیبل کے ساتھ break( اور ) استعمال کرنے کی بھی اجازت دیتی ہے ۔ JEP 354 نے اس استعمال کو تبدیل کیا ، لہذا جاوا 13 میں ہمارا کوڈ قدرے تبدیل ہوتا ہے: continuegotobreak
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   yield 6;
  case TUESDAY
   yield 7;
  case THURSDAY
  case SATURDAY
   yield 8;
  case WEDNESDAY
   yield 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
اگلے تین JEPs جاوا ورچوئل مشین سے وابستہ ہیں۔

JEP 350 ڈائنامک سی ڈی ایس آرکائیو

یہ توسیع آپ کو جاوا ایپلیکیشن کے عمل کے اختتام پر متحرک طور پر کلاسز کو آرکائیو کرنے کی اجازت دیتی ہے۔ class data sharingسی ڈی ایس یا کلاس ڈیٹا شیئرنگ آپ کو ان کلاسوں کی فہرست کو بطور ڈیفالٹ استعمال کرتے ہوئے، شروع میں شروع کی گئی تمام کلاسوں کو ایک خصوصی آرکائیو میں پیک کرنے کی اجازت دیتا ہے ۔ یہ ایپلی کیشنز کو لانچ کرنے اور RAM کو بچانے میں ایک اہم سرعت کا باعث بنتا ہے۔ پہلے، ایپ سی ڈی ایس کا استعمال ایک کثیر مرحلہ عمل تھا جس میں متعلقہ کلاسوں کی فہرست بنانا اور اس فہرست کو ایک آرکائیو بنانے کے لیے استعمال کرنا شامل تھا جسے بعد میں چلانے کے لیے استعمال کیا جائے گا۔ اب صرف اس کی ضرورت ہے -XX: جھنڈے کے ساتھ ایپلیکیشن کا ایک لانچ ArchiveClassesAtExitاس مقام کی نشاندہی کرتا ہے جہاں آرکائیو لکھا جائے گا۔ اس نقطہ نظر کے ساتھ، عام طور پر ایپلیکیشن بند ہونے کے بعد کلاسز کو خود بخود ایک آرکائیو میں پیک کر دیا جاتا ہے۔

JEP 351 ZGC : غیر استعمال شدہ میموری کو کم کریں۔

ایک سال پہلے، JDK 11 نے ZGC متعارف کرایا، جو ایک تجرباتی، توسیع پذیر، کم تاخیر سے کچرا جمع کرنے والا ہے۔ سب سے پہلے، ZGC نے عجیب و غریب سلوک کیا: اس نے آپریٹنگ سسٹم میں میموری کو واپس کرنے کی اجازت نہیں دی، چاہے اس کی مزید ضرورت نہ ہو۔ کچھ ماحول کے لیے، جیسے کنٹینرز، جہاں وسائل ایک ہی وقت میں متعدد خدمات کے ذریعے استعمال کیے جاتے ہیں، یہ نظام کی توسیع پذیری اور کارکردگی کو محدود کر سکتا ہے۔ ZGC ہیپ نام نہاد ZPages پر مشتمل ہے۔ جب کوڑا اٹھانے کے چکر کے دوران ZPages کو صاف کیا جاتا ہے، تو وہ ZPageCache پر واپس آ جاتے ہیں۔ اس کیشے میں موجود ZPages کو اس بات سے ترتیب دیا گیا ہے کہ وہ حال ہی میں کیسے استعمال ہوئے تھے۔ Java 13 میں، ZGC ان صفحات کو واپس کرے گا جن کی شناخت آپریٹنگ سسٹم میں طویل عرصے سے استعمال نہ ہونے کے طور پر کی گئی ہے۔ اس طرح انہیں دوسرے عمل کے لیے دوبارہ استعمال کیا جا سکتا ہے۔

JEP 353 لیگیسی ساکٹ API کو دوبارہ نافذ کریں۔

دونوں API نفاذ ابھی بھی JDK 1.0 java.net.Socketہیں ۔ java.net.ServerSocketاس میں، اور اس کے بعد کے تمام JDKs میں، ان APIs کا نفاذ کئی تکنیکوں کا استعمال کرتا ہے (جیسے کہ تھریڈ اسٹیک کو I/O بفر کے طور پر استعمال کرنا) جو انہیں لچکدار اور برقرار رکھنا مشکل بناتا ہے۔ اس مسئلے کو حل کرنے کے لیے، JDK 13 میں ایک نیا نفاذ فراہم کیا گیا تھا NioSocketImpl۔ اب اسے مقامی کوڈ کی ضرورت نہیں ہے، جس سے مختلف پلیٹ فارمز پر پورٹ کرنا آسان ہو جاتا ہے۔ یہ کلاس موجودہ بفر کیش میکانزم کا بھی استعمال کرتی ہے (اس مقصد کے لیے تھریڈ اسٹیک کے استعمال سے گریز کرنا) اور java.util.concurrentمطابقت پذیر طریقوں کے بجائے لاکنگ۔ یہ پروجیکٹ لوم کے ریشوں کے ساتھ انضمام کو آسان بنائے گا ۔

نئے APIs

ہم نے پہلے ذکر کیا ہے کہ جاوا 13 میں بیس کلاس لائبریریوں میں 76 نئے APIs شامل ہیں۔ وہ مندرجہ ذیل علاقوں کا احاطہ کرتے ہیں:
  • یونیکوڈ سپورٹ اپ ڈیٹس۔
  • ٹیکسٹ بلاکس کو سپورٹ کرنے کے لیے تین نئے طریقے String(اوپر JEP 255 کی تفصیل دیکھیں)۔
  • کلاسوں میں java.nioاب مطلق (رشتہ دار کے برخلاف) getاور طریقے مقرر کریں. وہ، بیس خلاصہ کلاس کی طرح ، بفر کے حصے کو بازیافت کرنے کا Bufferطریقہ شامل کرتے ہیں ۔ slice()
  • force()کلاس کا طریقہ MappedByteBufferایک بفر سیکشن کو اس کے بیکنگ اسٹوریج پر لکھنے پر مجبور کرتا ہے۔
  • nio.FileSystemnewFileSystem()فائل سسٹم کے بطور فائل کے مواد تک رسائی کے لیے تین نئے اوور لوڈ شدہ فارمز کا اضافہ کرتا ہے ۔
  • ایک نیا دلچسپ طریقہ سامنے آیا ہے javax.annotation.processing.ProcessingEnvironment۔ isPreviewEnabled(). یہ آپ کو بتائے گا کہ آیا پیش نظارہ کی خصوصیات فعال ہیں۔ یہ دلچسپ ہے کیونکہ مذکورہ تشریح @PreviewFeatureJDK 14 کے جاری ہونے تک دستیاب نہیں ہوگی۔
  • DocumentBuilderFactoryاور نام کی جگہ سے آگاہ مثالیں بنانے کے لیے تین نئے طریقے SAXParserFactoryحاصل کریں ۔javax.xml.parsers
مواد سائمن رائٹر کے ایک مضمون اور سرکاری دستاویزات پر مبنی ہے ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION