JavaRush /جاوا بلاگ /Random-SD /ڊبل ڪنگڻ جي شروعات
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");
 }};
اهو سڀ ڪجهه تمام خوبصورت ڏسڻ ۾ اچي ٿو، پر ان ۾ ان جون خاميون آهن، جيڪي ڊبل بريس جي شروعات کي هڪ مخالف نمونو بڻائين ٿيون. اسان انهن کي ايندڙ باب ۾ وڌيڪ ڏسنداسين.

ڊبل بريس جي شروعات جا فائدا ۽ نقصان.

Doublebrace شروعاتي هڪ گمنام اندروني طبقي جي تخليق کي استعمال ڪري ٿو . شروعاتي طور تي سطح تي ڇا لڪايو ويو آهي، جڏهن ته، 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(). جيڪڏهن توهان هڪ ننڍڙي لسٽ حاصل ڪرڻ چاهيو ٿا، اهو بهترين طريقو آهي، جيتوڻيڪ اهو ٻين مجموعن لاء گهٽ شفاف هوندو ، تنهنڪري توهان کي ٺاهڻ کان پهريان Setان کي ٺاهڻو پوندو -a. پر اھو اڃا بھتر آھي Double brace جي شروعات کان، ڇو ته ھن صورت ۾ ھڪڙو اضافي اندروني گمنام ڪلاس نه ٺاھيو ويندو آھي ھر وقت استعمال ڪيو ويندو آھي. جيڪڏهن توهان جاوا 8 هلائي رهيا آهيو توهان وٽ ٻيو متبادل طريقو آهي. JDK 8 اسٽريم 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طريقن جي ضمانت نه آهي ته اهي مجموعا ٺاهي رهيا آهن تبديلين کان محفوظ آهن. جاوا 8 ۾، اهي مجموعا واپس آيا آهن (جهڙوڪ - ArrayList، HashSet۽ HashMap) ڪافي عام آهن (اسان انهن کي تبديل ڪري سگهون ٿا)، پر اها حقيقت مستقبل جي JDK رليز ۾ درست ٿي سگهي ٿي. اهو سڀ ڪجهه هن وقت Double braceجاوا ۾ شروعات بابت آهي. هي ٽيمپليٽ ٽيسٽ ۽ ڊيمو لاءِ قابل قبول آهي، پر پيداوار جي استعمال لاءِ ڪافي نه آهي. ان جي موروثي نقصانن جي ڪري، ڊبل ڪنگڻ جي شروعات انهن ڏينهن ۾ هڪ مخالف نمونو بڻجي چڪي آهي، خاص طور تي دستياب متبادل کي ڏنو ويو آهي. مان پاڻ اڃا تائين هن تعمير کي جامد نقشن کي شروع ڪرڻ لاءِ استعمال ڪريان ٿو ۽ اهو ئي آهي. ڇاڪاڻ ته Listمان ان جي ڪنسٽرڪٽر ۾ Collectionsٺاهڻ سان گڏ ٺاهي ٺاهڻ کي ترجيح ڏيان ٿو. Array.asList۽ جيڪڏهن مان Java 8 استعمال ڪريان ٿو - هڪ ڊزائين استعمال ڪندي اسٽريم API ۽ collect(). لاڳاپيل آرٽيڪل: جيڪڏهن توهان هن سبق مان لطف اندوز ٿيو ۽ جاوا پروگرامنگ جي نمونن، اصولن ۽ بهترين طريقن بابت وڌيڪ ڄاڻڻ چاهيو ٿا، ته توهان شايد اسان جي سائيٽ تي ٻين مضمونن کي پڻ ڏسڻ چاهيندا . تجويز ڪيل پڙھڻ: جيڪڏھن توھان وڌيڪ ڄاڻڻ چاھيو ٿا نمونن ۽ بھترين عملن بابت توھان کي پڙھڻ گھرجي Effective Programming by Joshua Bloch ، ڪو به ڪتاب ان جي جاءِ نه ٿو وٺي سگھي. ۽ جيڪڏهن توهان جاوا ۾ اڳ ۾ ئي ماهر آهيو ۽ ڊزائن جي نمونن تي هڪ ڪتاب ڳولي رهيا آهيو، پيش ڪرڻ جو مزاحيه انداز جيڪو دلچسپ ۽ پڙهڻ ۾ آسان آهي، تي ڌيان ڏيو "سر پهريون. ڊيزائن جا نمونا " .
مترجم کان: مون جان بوجھ ڪري بلوچ جي اصل ڪتاب جو لنڪ مهيا ڪيو، ڇاڪاڻ ته ان جو روسي ۾ ترجمو ناڪام ٿيو آهي (مثال طور، Builder = Constructor).
مضمون جو ترجمو جاوا ۾ Double Brace Initialization ڇا آهي؟ Anti Pattern Example (شايع ٿيل آڪٽوبر 2015).
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION