JavaRush /جاوا بلاگ /Random-UR /ڈبل تسمہ شروع کرنا
Joysi
سطح

ڈبل تسمہ شروع کرنا

گروپ میں شائع ہوا۔

1. ڈبل تسمہ شروع

ڈبل منحنی خطوط وحدانی کا استعمال کرتے ہوئے شروع کرنا ( اس کے بعد ڈبل منحنی خطوط وحدانی انیشیلائزیشن کے طور پر کہا جاتا ہے ) ایک جاوا ٹول ہے جس کے لیے ان کے اعلان کے ساتھ فہرست، سیٹ اور نقشہ ایک ساتھ جمع کرنا ہے۔
ڈبل بریس ابتداء - 1
جب آپ کو فکسڈ عناصر کے ساتھ فہرستوں کی ضرورت ہو، جیسے کہ معاون مصنوعات یا کرنسیوں کی فہرست، اس فہرست کو شروع کرنے کے ساتھ ہی اس کا اعلان کرنا کوڈ کی پڑھنے کی اہلیت کو بہتر بناتا ہے۔ یہی وجہ ہے کہ ڈبل بریس انیشیلائزیشن مقبولیت حاصل کر رہی ہے، کیونکہ کوڈ میں بیک وقت آغاز کے ساتھ مجموعے بنانے کے کوئی اور معیاری طریقے نہیں ہیں۔ بدقسمتی سے، دیگر پروگرامنگ زبانوں کے برعکس، جاوا لٹریلز کے مجموعے کی حمایت نہیں کرتا ہے۔ اس حد کی وجہ سے، عناصر کی ایک چھوٹی سی تعداد کے ساتھ ایک ناقابل ترمیم فہرست بنانا ہمیں مجبور کرتا ہے کہ ہم کوڈ کی کئی لائنیں بار بار کالز کی شکل میں لکھیں add()تاکہ حتمی ریپنگ کے ساتھ مطلوبہ عناصر کو شامل کیا جا سکے۔
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(5);
list.add(7);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
یہ ایک غیر ضروری طور پر بے کار وضاحت ہے جسے آسان بنایا جا سکتا ہے۔ آئیے جامد فہرستوں کو اپنے لیے آسان طریقے سے بھرتے ہیں، یعنی براہ راست آغاز کے دوران جامد بلاکس میں، جس میں Double braceابتداء ہماری مدد کرے گی، ہمیں سب کچھ ایک لائن میں لکھنے کی اجازت دیتا ہے:
List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>() {{
        add(2);
        add(3);
        add(5);
}});
اسی طرح، Double braceابتداء ہمیں اقدار کو بھرنے میں مدد کرے گی اور HashMap:
Map<Integer, String> intToString = new HashMap<Integer, String>(){{
         put(1, "one");
         put(2, "two");
         put(3, "three");
 }};
یہ سب بہت خوبصورت لگ رہا ہے، لیکن اس میں اپنی خامیاں ہیں، جو ڈبل بریس کی ابتداء کو اینٹی پیٹرن بناتی ہیں۔ ہم اگلے باب میں ان کا مزید جائزہ لیں گے۔

ڈبل منحنی خطوط وحدانی شروع کرنے کے فوائد اور نقصانات۔

Doubleمنحنی خطوط وحدانی کی ابتداء ایک گمنام اندرونی کلاس کی تخلیق کا استعمال کرتی ہے ۔ ابتدائی طور پر سطح پر کیا پوشیدہ ہے، تاہم، Double braceجب بھی آپ اسے استعمال کرتے ہیں تو ابتداء اس کی مثال کے مزید آغاز کے ساتھ ایک کلاس بناتی ہے۔ اس کے علاوہ، اس پرائیویٹ کلاس کا ایک پوشیدہ حوالہ استعمال کیا جاتا ہے، جو ہمیں میموری کے ممکنہ لیک کی طرف لے جا سکتا ہے۔ آپ جنرک (ڈائمنڈ آپریٹر <>) کے لیے بھوت آپریٹر بھی استعمال نہیں کر سکتے، کیونکہ ہم گمنام کلاس کے اندر تک رسائی حاصل نہیں کر سکتے۔
(مترجم کی طرف سے: ایک بار پھر مزید تفصیل میں:
پہلی کے بعد {، ایک داخلی گمنام کلاس بنتی ہے، دوسری کے بعد، {کلاس کی مثال بناتے وقت ابتداء ہوتی ہے، جس میں ہمیں بیرونی کے شعبوں اور طریقوں تک رسائی حاصل ہوتی ہے۔ گمنام) کلاس سے متعلق۔)
فوائد:
  1. کوڈ میں لائنوں کو کم کرنا
  2. ایک اظہار میں تخلیق اور ابتدا۔
مائنس:
  1. آپ سے پوشیدہ ایک گمنام کلاس بنانا۔
  2. جس کی مثال کے طور پر ہر بار جب ہم اسے استعمال کرتے ہیں تو ہمیں اضافی لاگت آتی ہے۔
  3. ہر بار اس کا ایک پوشیدہ حوالہ تخلیق کیا جاتا ہے، جو میموری لیک ہونے کا باعث بن سکتا ہے۔
فیصلہ: مندرجہ بالا نقصانات اور ڈبل منحنی خطوط وحدانی کے متبادل کے وجود کی وجہ سے، ابتداء کو جاوا کی دنیا میں ایک مخالف پیٹرن کے طور پر دیکھا جاتا ہے۔ بلی کے بچے کو بچائیں۔

جاوا میں ڈبل بریس انیشیلائزیشن کے متبادل

اچھی خبر یہ ہے کہ جاوا میں انہی مقاصد کو حاصل کرنے کے دوسرے طریقے بھی ہیں۔ ہم کوڈ کی ایک لائن میں کلیکشن کلاس سے کاپی کنسٹرکٹر کا استعمال کرتے ہوئے ایک ArrayList کی تخلیق اور ابتداء کو نافذ کر سکتے ہیں جیسا کہ ذیل میں دکھایا گیا ہے:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Arrays.asList()ArrayListہمیں کاپی کنسٹرکٹر کو بھیجی گئی مقررہ لمبائی کی فہرست واپس کرے گا ۔ Arrays.asList()اور سے واپس آنے والی مقررہ لمبائی کی فہرستوں کے درمیان فرق کو ذہن میں رکھیں Collections.unmodifiableList(): آپ - کے عناصر کو شامل یا ہٹا نہیں سکتے ہیں ArrayList، لیکن آپ انڈیکس کے ذریعے ایک عنصر کو تبدیل کر سکتے ہیں set()، جو کہ آپ واپس کی گئی فہرست کے ساتھ نہیں کر سکتے Collections.unmodifiableList()۔ اگر آپ ایک چھوٹی فہرست حاصل کرنا چاہتے ہیں تو یہ بہترین طریقہ ہے، حالانکہ یہ دوسرے مجموعوں کے لیے کم شفاف ہوگا ، اس لیے آپ کو -a بنانے سے پہلے Setاسے بنانا ہوگا ۔ لیکن یہ اب بھی ڈبل منحنی خطوط وحدانی شروع کرنے سے بہتر ہے، کیونکہ اس معاملے میں ہر بار استعمال ہونے پر ایک اضافی اندرونی گمنام کلاس نہیں بنائی جاتی ہے۔ اگر آپ جاوا 8 چلا رہے ہیں تو آپ کے پاس دوسرا متبادل طریقہ ہے۔ JDK 8 Stream API آپ کو ایک مجموعہ میں آؤٹ پٹ طریقوں کو ملا کر چھوٹے مجموعے بنانے میں مدد کرے گا : ListSetStream FactoryList
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
اس کے بجائے Setآپ ذیل میں Collectors.toSet()طریقہ استعمال کر سکتے ہیں Collectors.toList():
Set<String> set = Collections.unmodifiableSet(Stream.of("abc", "bcd", "cde").collect(toSet()));
ویسے، Stream collectطریقے اس بات کی ضمانت نہیں دیتے کہ ان کے ذریعے جو مجموعے پیدا ہوتے ہیں وہ تبدیلیوں سے محفوظ ہیں۔ Java 8 میں، انہوں نے جو مجموعے واپس کیے ہیں (جیسے - ArrayList, HashSet, اور HashMap) بہت عام ہیں (ہم انہیں تبدیل کر سکتے ہیں)، لیکن اس حقیقت کو مستقبل کے JDK ریلیز میں درست کیا جا سکتا ہے۔ Double braceجاوا میں شروع کرنے کے بارے میں ابھی کے لئے اتنا ہی ہے ۔ یہ ٹیمپلیٹ ٹیسٹ اور ڈیمو کے لیے قابل قبول ہے، لیکن پروڈکشن کے استعمال کے لیے کافی اچھا نہیں ہے۔ اس کے موروثی نقصانات کی وجہ سے، ڈبل بریس انیشیلائزیشن ان دنوں ایک مخالف پیٹرن بن گیا ہے، خاص طور پر دستیاب متبادل کے پیش نظر۔ میں خود اب بھی اس تعمیر کو جامد نقشوں کو شروع کرنے کے لیے استعمال کرتا ہوں اور بس۔ کیونکہ میں اس کے کنسٹرکٹر میں تخلیق کے ساتھ ملا کر Listتخلیق کرنا پسند کرتا ہوں ۔ اور اگر میں Java 8 استعمال کرتا ہوں - Stream API کا استعمال کرتے ہوئے ایک ڈیزائن اور . متعلقہ مضامین: اگر آپ اس ٹیوٹوریل سے لطف اندوز ہوئے اور جاوا پروگرامنگ کے نمونوں، اصولوں اور بہترین طریقوں کے بارے میں مزید جاننا چاہتے ہیں، تو آپ ہماری سائٹ پر موجود دیگر مضامین کو بھی دیکھنا چاہیں گے ۔ تجویز کردہ پڑھنا: اگر آپ نمونوں اور بہترین طریقوں کے بارے میں مزید جاننا چاہتے ہیں تو آپ کو Effective Programming by Joshua Bloch پڑھنا چاہیے ، کوئی کتاب اس کی جگہ نہیں لے سکتی۔ اور اگر آپ جاوا میں پہلے سے ماہر ہیں اور ڈیزائن کے نمونوں پر ایک کتاب تلاش کر رہے ہیں، جس کی پریزنٹیشن کا مزاحیہ انداز دلچسپ اور پڑھنے میں آسان ہے، تو "Head First" پر توجہ دیں۔ ڈیزائن پیٹرن" . CollectionsArray.asListcollect()
مترجم کی طرف سے: میں نے جان بوجھ کر Bloch کی اصل کتاب کا لنک فراہم کیا، کیونکہ اس کا روسی میں ترجمہ ناکام ہے (مثال کے طور پر، Builder = constructor)۔
مضمون کا ترجمہ جاوا میں ڈبل بریس انیشیلائزیشن کیا ہے؟ اینٹی پیٹرن کی مثال (اکتوبر 2015 میں شائع ہوئی)۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION