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
brace شروعاتي هڪ گمنام اندروني طبقي جي تخليق کي استعمال ڪري ٿو . شروعاتي طور تي سطح تي ڇا لڪايو ويو آهي، جڏهن ته،
Double brace
شروعات هڪ ڪلاس ٺاهي ٿي ان جي مثال جي وڌيڪ شروعات سان هر وقت توهان ان کي استعمال ڪندا آهيو. ان کان سواء، هن خانگي طبقي لاء هڪ لڪيل حوالو استعمال ڪيو ويو آهي، جيڪو اسان کي ممڪن ياداشت جي ليکڪ ڏانهن وٺي سگھي ٿو. توھان بھوت آپريٽر کي جنريڪس (ھيرا آپريٽر <>) لاءِ پڻ استعمال نٿا ڪري سگھون، ڇو ته اسين گمنام طبقي جي اندر تائين رسائي نٿا ڪري سگھون.
(ترجمي نگار کان: هڪ ڀيرو ٻيهر وڌيڪ تفصيل سان:
پهرين کان پوءِ { ، هڪ اندروني گمنام ڪلاس ٺاهيو ويندو آهي، ٻئي کان پوءِ، { شروعات ٿيندي آهي جڏهن ڪلاس جو هڪ مثال ٺاهيو ويندو آهي، جنهن ۾ اسان کي ٻاهرين جي شعبن ۽ طريقن تائين رسائي هوندي آهي) لاڳاپو گمنام) طبقي سان.) |
فائدا:
- ڪوڊ ۾ لائينون گھٽائڻ
- تخليق ۽ شروعات هڪ اظهار ۾.
مائنس:
- توهان کان لڪيل هڪ گمنام ڪلاس ٺاهڻ.
- جيڪو اسان کي ان جي مثال طور هر وقت استعمال ڪرڻ لاء اضافي قيمتون خرچ ڪري ٿو.
- هر دفعي ان جو هڪ پوشيده حوالو ٺاهيو ويندو آهي، جيڪو شايد ميموري ليڪ جي ڪري سگھي ٿو.
فيصلو: مٿين نقصانن جي ڪري ۽ ڊبل ڪنگڻ جي متبادل جي وجود جي ڪري، شروعات کي جاوا دنيا ۾ مخالف نموني طور ڏٺو وڃي ٿو.
جاوا ۾ ڊبل بريس شروعاتي ڪرڻ جا متبادل
سٺي خبر اها آهي ته جاوا ۾ ساڳيا مقصد حاصل ڪرڻ جا ٻيا طريقا آهن. اسان ڪوڊ جي ھڪڙي لائن ۾ لاڳو ڪري سگھون ٿا ھڪڙي 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 توهان جي مدد ڪندي ننڍڙا مجموعا ٺاهڻ ۾ آئوٽ پُٽ طريقن کي گڏ ڪري مجموعي ۾ :
List
Set
Stream Factory
List
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).
GO TO FULL VERSION