पूर्वसर्ग वरीयता

क्या हो रहा है? एक पूर्वसर्ग।

हैमिल्टन, एनजे में मूर्तिकला के लिए मैदान में लिया गया फोटो

रटगर्स यूनिवर्सिटी में मेरा एक दोस्त हमेशा इस सवाल का जवाब देता था कि "क्या चल रहा है?" लगातार प्रतिक्रिया के साथ: "एक पूर्वसर्ग।" मैं कई बार इस जाल में फंस चुका हूं।

क्या आपने कभी सोचा है कि हम अपने जावा एपीआई में प्रीपोजिशन का कितना उपयोग करते हैं?

हम ग्रहण संग्रह में विधियों में कई अलग-अलग पूर्वसर्गों का उपयोग करते हैं । हर कोई एक अलग अर्थ बताता है। ग्रहण संग्रह में कई बार दिखाई देने वाले कुछ पूर्वसर्ग हैं with, of, by, as, to, from, into। जब हम किसी विधि के नाम में एक पूर्वसर्ग का उपयोग करते हैं, तो उसे अर्थ को स्पष्ट रूप से व्यक्त करने में मदद करनी चाहिए। अगर ऐसा नहीं होता, तो हम इसके बिना बेहतर होते।

दो प्रस्ताव प्रवेश करते हैं। एक पूर्वसर्ग छोड़ देता है।

इस साल JavaOne में, मैंने ग्रहण संग्रह API में हमारे संग्रह फ़ैक्टरी विधियों के नामकरण के लिए दो पूर्वसर्गों के बीच एक युद्ध का वर्णन किया। लड़ाई ofऔर के बीच थी with।

MutableList<String> list = Lists.mutable.of("1", "2", "3");
                           vs.
MutableList<String> list = Lists.mutable.with("1", "2", "3");

संग्रह बनाने के लिए फ़ैक्टरी विधियों के नामकरण के लिए प्रस्ताव और दोनों अच्छी तरह से काम करते हैं of। withमैं व्यक्तिगत रूप से पसंद करता हूं with, ज्यादातर इसलिए क्योंकि स्मॉलटाक के साथ इसका इस्तेमाल किया गया था। स्मॉलटाक में, मैं नियमित रूप से निम्नलिखित लिखूंगा:

|set|
set := Set with: ‘1’ with: ‘2’ with: ‘3’.

MutableSet<String> set = Sets.mutable.with("1", "2", "3");

MutableSet<String> set = Sets.mutable.of("1", "2", "3");

में java.util.Collection, संग्रह में और से तत्वों को जोड़ने और हटाने के तरीके हैं। उनका नाम है add, addAll, removeऔर removeAll। ये चार विधियां वापस आती हैं boolean। यह उन्हें धाराप्रवाह कोड लिखने के लिए अनुपयुक्त बनाता है।

एक्लिप्स कलेक्शंस में हमारे अपने म्यूटेबल इंटरफेस हैं, इसलिए हमें पता था कि हम दो प्रीपोजिशन में से एक का उपयोग करके प्रवाह की समस्या को ठीक कर सकते हैं। हमने साथ जाने का फैसला किया with, क्योंकि withइसका नाम प्राकृतिक विपरीत है without।

Set<String> set = 
    Sets.mutable.with("1", "2", "3")
        .with("4")
        .without("2");
Assert.assertEquals(Sets.mutable.with("1", "3", "4"), set);

Set<String> set =
        Sets.mutable.with("1", "2", "3")
                .withAll(Lists.mutable.with("4"))
                .withoutAll(Lists.mutable.with("1", "3"));
Assert.assertEquals(Sets.mutable.with("2", "4"), set);

हमने इस पैटर्न को अपने अपरिवर्तनीय संग्रह में भी बढ़ाया है।

ImmutableSet<String> set =
        Sets.immutable.with("1", "2", "3")
                .newWithAll(Lists.mutable.with("4"))
                .newWithoutAll(Lists.mutable.with("1", "3"));
Assert.assertEquals(Sets.mutable.with("2", "4"), set);

क्लोन का हमला

पूर्वसर्ग ofग्रहण संग्रह में उदाहरण-आधारित संग्रह फ़ैक्टरी विधियों की लड़ाई हार गया, क्योंकि इसके लिए कोई अच्छा प्राकृतिक विपरीत नहीं है ofजैसे कि के लिए है with। उस ने कहा, ofकभी-कभी ग्रहण संग्रह एपीआई में अन्य विधि नामों का एक महत्वपूर्ण हिस्सा होता है।

// Bag API - occurrencesOf
MutableBag<String> bag = Bags.mutable.with("1", "2", "3");
Assert.assertEquals(1, bag.occurrencesOf("2"));
// List API - indexOf
MutableList<String> list = Lists.mutable.with("1", "2", "3");
Assert.assertEquals(1, list.indexOf("2"));
// RichIterable API - sumOfInt, sumOfLong, sumOfFloat, sumOfDouble 
MutableList<String> list = Lists.mutable.with("1", "2", "3");
long sum = list.sumOfInt(Integer::parseInt);
Assert.assertEquals(6L, sum);
// RichIterable API - selectInstancesOf
MutableList<String> list = Lists.mutable.with("1", "2", "3");
MutableList<String> filtered = list.selectInstancesOf(String.class);
Assert.assertEquals(list, filtered);

RichIterable इंटरफ़ेस में "साथ" विधियां

Withएक्लिप्स कलेक्शंस एपीआई में अधिक प्रचलित हो गया जब इसका उपयोग मौजूदा तरीकों जैसे select,, rejectआदि को बढ़ाने के लिए किया गया था collect। इंटरफ़ेस Withमें विधियों RichIterableको मूल रूप से अनुकूलन के रूप में जोड़ा गया था। उन्होंने हमें पूरी तरह से स्टेटलेस बनाने के अधिक अवसर प्रदान करके, अनाम आंतरिक कक्षाओं को स्थिर बनाने की अनुमति दी। पूरी तरह से स्वतंत्र और आकस्मिक लाभ के रूप में, Withविधियां हमें ग्रहण संग्रह एपीआई के साथ विधि संदर्भों का उपयोग करने के अधिक अवसर प्रदान करती हैं। यह एक अच्छी बात है, क्योंकि मेरे पास एक विधि संदर्भ वरीयता है । एक्लिप्स कलेक्शंस पेट काटा से डोमेन का उपयोग करके मेथड रेफरेंस के साथ इनमें से कुछ विधियों का उपयोग करने के कुछ उदाहरण यहां दिए गए हैं ।

boolean any =
        this.people.anySatisfyWith(Person::hasPet, PetType.CAT);
Assert.assertTrue(any);

boolean all =
        this.people.allSatisfyWith(Person::hasPet, PetType.CAT);
Assert.assertFalse(all);

boolean none =
        this.people.noneSatisfyWith(Person::hasPet, PetType.CAT);
Assert.assertFalse(none);

Person found =
        this.people.detectWith(Person::hasPet, PetType.CAT);
Assert.assertNotNull(found);

int count =
        this.people.countWith(Person::hasPet, PetType.CAT);
Assert.assertEquals(2, count);

MutableList<Person> selected =
        this.people.selectWith(Person::hasPet, PetType.CAT);
MutableList<Person> rejected =
        this.people.rejectWith(Person::hasPet, PetType.CAT);
PartitionMutableList<Person> partition =
        this.people.partitionWith(Person::hasPet, PetType.CAT);
Assert.assertEquals(selected, partition.getSelected());
Assert.assertEquals(rejected, partition.getRejected());

public boolean hasPet(PetType petType)
{
    return this.pets.containsBy(Pet::getType, petType);
}

मैं एक्लिप्स फाउंडेशन में एक्लिप्स कलेक्शंस ओएसएस प्रोजेक्ट के लिए प्रोजेक्ट लीड और कमिटर हूं । ग्रहण संग्रह योगदान के लिए खुला है । यदि आप पुस्तकालय को पसंद करते हैं, तो आप इसे GitHub पर अभिनीत करके हमें बता सकते हैं।

टेक में वरिष्ठ डेवलपर्स के लिए आगे क्या? प्रोजेक्ट मैनेजर, टेक्निकल आर्किटेक्ट या एक DevOps इंजीनियर 2020 में जावा प्रोग्रामर को क्या सीखना चाहिए?

Suggested posts

एक सुरक्षित कार्य वातावरण बनाना

एक सुरक्षित कार्य वातावरण बनाना

“जब मैं खतरे में हूँ तब वह मेरी रक्षा करेगा। वह मुझे अपने डेरे में छिपा लेगा।

जर्नल ऑवर्ट

जर्नल ऑवर्ट

ओपन डायरी: ए पिक्चर ए डे। मैं हमेशा कहानियों से आकर्षित रहा हूं।

Related posts

रीथिंकिंग मीडिया: मैककेनी के पांच सत्य और संचार का भविष्य

आज की हाइपर-कनेक्टेड दुनिया में, मीडिया सिस्टम जनता की राय को आकार देने में महत्वपूर्ण भूमिका निभाते हैं, और परिणामस्वरूप, लोकतांत्रिक निर्णय लेने में। संचार की राजनीतिक अर्थव्यवस्था के अपने गहन विश्लेषण में, विद्वान रॉबर्ट मैककेनी पारंपरिक ज्ञान को चुनौती देते हैं और मीडिया के बारे में "पांच सत्य" को प्रस्तुत करते हैं।

खतरनाक बातचीत

खतरनाक बातचीत

अगर हम इस ग्रह पर फलना-फूलना जारी रखना चाहते हैं, तो हमें खतरनाक बातचीत करनी होगी। वे जो चुनौती देते हैं कि हमने क्या किया है, हम क्या कर रहे हैं, और वर्तमान में हम क्या करना जारी रखने के लिए तैयार हैं (या करने की योजना बना रहे हैं)।

थ्रेट हंटिंग के लिए OSINT इकट्ठा करना

थ्रेट हंटिंग के लिए OSINT इकट्ठा करना

नमस्ते, साइबर उत्साही! थ्रेट हंटिंग सीरीज के लिए OSINT में वापस स्वागत है। पहले लेख में, मैंने आपको OSINT और खतरे की खोज में इसके महत्व के बारे में एक संक्षिप्त विवरण दिया था।

आप अपने प्रतीक्षा के मौसम में क्या कर सकते हैं (टेक में अपनी पहली नौकरी के लिए प्रतीक्षा कर रहे हैं)

आप अपने प्रतीक्षा के मौसम में क्या कर सकते हैं (टेक में अपनी पहली नौकरी के लिए प्रतीक्षा कर रहे हैं)

यदि आप इसे अकेले करने की कोशिश करते हैं तो एक नए करियर पर स्विच करना बेहद चुनौतीपूर्ण हो सकता है। जवाबदेही भागीदारों को ढूंढना महत्वपूर्ण है जो आपके समान सीखने के स्तर पर हैं, जो समान लक्ष्यों, दृढ़ता और ड्राइव को साझा करते हैं।