टीम के सदस्यों के बीच सामान्य प्रोग्रामिंग के लिए जागरूकता कैसे फैलाएं?


20

मैं ऐसे माहौल में रह रहा हूं, जहां लोग मानते हैं:

  1. जावा जेनरिक विशेष रूप से लाइब्रेरी राइटिंग के लिए उपयोग की जाने वाली सुविधा है और वास्तविक कोडिंग के लिए नहीं।
  2. C ++ एक OO प्रोग्रामिंग भाषा है; templateएक वैकल्पिक और परिहार्य सुविधा है

हालांकि, ये लोग जेनेरिक प्रोग्रामिंग (जैसे एसटीएल, जावा कंटेनर) का उपयोग करके लिखे गए पुस्तकालयों पर बहुत भरोसा करते हैं। यदि मैं templates या का उपयोग करके एक कोड लिखता हूं generics, तो कोड समीक्षक इसे अस्वीकार करने की सबसे अधिक संभावना है और इसे "उचित / समझने योग्य / सुरुचिपूर्ण" तरीके से लिखने के लिए टिप्पणी करेगा ।

ऐसी मानसिकता सामान्य प्रोग्रामर से लेकर वरिष्ठतम प्रबंधक तक के लिए लागू होती है। कोई रास्ता नहीं है, क्योंकि 90% समय, इन लोगों की पैरवी है।

उन्हें समझाने का सबसे अच्छा तरीका ( गला काटा नहीं जा रहा है ), एक ही समय में ओओ और जेनेरिक प्रोग्रामिंग का गठन करने वाले कोड लिखने का व्यावहारिक तरीका क्या है?


11
मैं आपको शुभकामनाएं देता हूं, लेकिन यदि आप अपना रास्ता चाहते हैं, तो आप शायद छोड़ देंगे।
मफिन मैन

3
@ TheMuffinMan, आप सही कह रहे हैं। मैंने वह कार्यस्थल छोड़ दिया और अब मेरी अपनी कंपनी है। यहाँ कोडिंग पर मेरा पूरा नियंत्रण है!
इमिलिंड

जवाबों:


14

अभी भी दुनिया में ऐसे लोग हैं जो "सामान्य कोडिंग" में जेव जेनरिक का उपयोग नहीं करते हैं। मैं इसे सी ++ टेम्पलेट्स के साथ विश्वास कर सकता हूं, लेकिन जेनरिक? वे सीखने / उपयोग करने में भी कठिन नहीं हैं। गंभीर रूप से जावा और सी ++ की सर्वश्रेष्ठ विशेषताएं क्रमशः जेनरिक और टेम्प्लेट हैं।

चीजों को लोगों को समझाने का सबसे अच्छा तरीका एक सम्मोहक तर्क देना, गैर-धमकी देना और सही होना है।

जब तक आप अपनी प्रोग्रामिंग भाषा के रूप में टेम्प्लेट का उपयोग करने जैसा कुछ नहीं कर रहे हैं, पैरामीट्रिक पॉलीमॉर्फिज्म (जेनरिक / टेम्प्लेट) लगभग निश्चित रूप से अच्छा है।

1. कोड दोहराव से बचा जाता है।

यह स्पष्ट है, लेकिन बहुरूपी कोड सामान्य कोड है। इसीलिए इसे जेनरिक कहा जाता है।

2. बेहतर स्थैतिक जाँच का समर्थन करता है।

पैरामीट्रिक बहुरूपता के बिना आप उन चीजों को लिखना पसंद करते हैं जो public Object clone()या public boolean equals(object b)जो केवल घृणित नहीं हैं, उनके पास ऐसे प्रकार हैं जो वे क्या करते हैं इसके बारे में कोई जानकारी नहीं देते हैं, और हमेशा के लिए सभी जगह अपवादों को फेंक देते हैं। पैरामीट्रिक बहुरूपता का विकल्प सभी जगह डाली जाती है

3. गैर पैरामीट्रिक बहुरूपता OOP कोड मूल रूप से "बाइनरी तरीकों" को सही तरीके से संभालने में असमर्थ है।

आप अक्सर इनका उपयोग करते हैं।

4. यह सबसे अच्छा अभ्यास है

जावा में, जेनेरिक का उपयोग सबसे अच्छा अभ्यास माना जाता है (जोश बलोच द्वारा प्रभावी जावा देखें)। सटर और अलेक्जेंड्रेस्कु जैसे प्रमुख सी ++ विचारक विभिन्न प्रकार की समस्याओं को हल करने के लिए टेम्पलेट्स के उपयोग को प्रोत्साहित करते हैं।

5. यह OO प्रतिमान पर फिट बैठता है।

लोग अक्सर इस पर ध्यान नहीं देते हैं, लेकिन उप-टाइपिंग और जेनरिक का संयोजन एक सिस्टम को अधिक शक्तिशाली अभिव्यंजक बनाता है, और उनमें से सिर्फ एक के साथ किसी भी प्रणाली की तुलना में ऑब्जेक्ट उन्मुख होता है।

स्काला के मिश्रणों पर विचार करें। ये एक अच्छी सुविधा है जो आपको घटक भागों से अपनी वस्तुओं को एक साथ खींचने की सुविधा देती है। जेनरिक और टेम्प्लेट इनमें से कुछ लाभों का अनुकरण कर सकते हैं। उदाहरण के लिए, मान लें कि आपकी कोई ऑब्जेक्ट डेटाबेस का उपयोग करती है। अच्छा डिजाइन आप एक अलग वर्ग में डेटाबेस का उपयोग बाहर अमूर्त होगा। यदि सही किया जाता है तो यह न केवल आपके डेटा-स्टोर (परीक्षण की कुंजी) का मज़ाक उड़ाता है, इसका अर्थ यह भी है कि आप उस नए नो-एसक्यूएल डेटाबेस की तरह वैकल्पिक कार्यान्वयन जोड़ सकते हैं। हालांकि, आपको एक समस्या हो सकती है, जिससे आप जिस कार्यान्वयन का उपयोग करते हैं, वह आपके व्यावसायिक ऑब्जेक्ट की विभिन्न क्षमताओं को प्राप्त करेगा।

बचाव के लिए जेनरिक!

   public class Business<S extends Datastore>{
      private S store; ...
   }

अब आप Businessडेटाबेस विशिष्ट सुविधाओं का उपयोग करने की क्षमता के आधार पर अपनी वस्तुओं को अलग-अलग करना शुरू कर सकते हैं । आपको अभी भी कुछ रनटाइम चेक और कास्टिंग की आवश्यकता है, लेकिन आप बेहतर कोड का निर्माण शुरू कर सकते हैं।

तथा

6. सामान्य कोड मौजूद नहीं है।

प्रोग्रामिंग ब्रह्मांड में केवल तीन चीजें हैं:

  1. पुस्तकालयों,
  2. विन्यास, और
  3. बुरा कोड।

यदि आप अपने कोड के बारे में नहीं सोचते हैं जैसे कि यह एक पुस्तकालय है तो आप गंभीर संकट में हैं जब आपके प्रोजेक्ट में बदलाव की आवश्यकताएं हैं। वास्तुकला (यकीनन) अच्छा एपीआई डिजाइन करने की कला है।

मुझे यह रवैया आश्चर्यजनक लगता है। जब आप पैराट्राइज्ड प्रकारों के साथ प्रोग्रामिंग करने के लिए अभ्यस्त हो जाते हैं, तो उनका उपयोग नहीं करने से सब कुछ दर्द होता है। और, जावा और सी ++ में खुरदरे धब्बों का एक समूह होता है, जिसकी वे मदद करते हैं।


7
मैं इस धारणा है कि जैसे normal code: अस्तित्व में नहीं है और केवल तीन प्रकार के होते हैं कि libraries, configurationsऔर bad code। यह एक आदर्शवादी तर्क है, हालांकि आपको अभी भी इसे अपने सहयोगियों को समझाना होगा, हालांकि आप के रूप में आदर्शवादी नहीं हो सकते हैं। मैं मानता हूँ कि हालांकि parametrized प्रकार का उपयोग कर बस है भयानक एक बार आप इसे का लटका मिलता है।
Spoike

3
बिल्ली, यहां तक ​​कि C ++ टेम्पलेट भी उपयोग करने में मुश्किल नहीं हैं यदि आप उन्हें टेम्पलेट मेटाप्रोग्रामिंग उद्देश्यों के लिए उपयोग नहीं करते हैं। :-)
सिलिको में

-1 यह सुझाव देने के लिए कि हर कोई जो जेनरिक का उपयोग नहीं करने का फैसला करता है, वह सिर्फ इसलिए करता है क्योंकि उन्हें पता नहीं है कि फीचर कैसे काम करता है।
tp1

दुरुपयोग की संभावना को देखते हुए मैं कहूंगा कि जेनेरिक / टेम्प्लेट का उपयोग करना प्रतिबंधित / न करना एक बहुत बेहतर निर्णय हो सकता है जो आप इसका श्रेय देते हैं।
रयथल

जो लोग बड़े पैमाने पर सॉफ़्टवेयर इंजीनियरिंग के लिए जेनरिक / टेम्प्लेट का उपयोग करने से इनकार करते हैं, वे गलती से और अनिवार्य रूप से "दूसरी भाषा" का निर्माण करेंगे - एक दुभाषिया जो जावा पर चलता है, जो कुछ भी "व्यावसायिक भाषा" उनके दिमाग में लागू करता है। en.wikipedia.org/wiki/Inner-platform_effect
rwong

16

यह अधिक सामान्य प्रश्न का एक विशिष्ट रूप है "आप अपने वरिष्ठों को एक नई और बेहतर तकनीक / चीजों को बनाने के तरीके का उपयोग शुरू करने के लिए कैसे मनाते हैं?"

दुर्भाग्य से, मुझे नहीं लगता कि आप कर सकते हैं, और मुझे यकीन नहीं है कि आपको चाहिए। यह उनकी पसंद की परिभाषा के अनुसार है, क्योंकि वे आपको एक निश्चित तरीके से काम करने के लिए भुगतान कर रहे हैं जो उन्होंने चुना है, किसी भी तरह से आपको पसंद नहीं है। आप जो सबसे अच्छा कर सकते हैं वह सुझाव है कि यह तकनीक वहां से बाहर है, बहुत से लोग इसका उपयोग कर रहे हैं, और यह भविष्य का तरीका प्रतीत होता है। आप शायद इस तथ्य का भी उल्लेख करना चाहते हैं कि वे पहले से ही जानना चाहते हैं: कि लोगों के लिए सबसे अच्छा है कि वे अपने कौशल को स्थिर न होने दें। लेकिन यह है: यदि वे इसे नहीं खरीदते हैं, तो कुछ भी नहीं है जो आप कर सकते हैं।

उनके पास अन्य विचार हो सकते हैं जो आपके पास नहीं हैं, क्योंकि आप उनके स्तर पर नहीं सोच रहे हैं। आप एक इंजीनियर के रूप में सोच रहे हैं, वे व्यवसाय के संदर्भ में या मानव संसाधन शर्तों के बारे में अधिक सोच रहे होंगे।

  • क्या जेनरिक (या जो भी) अपने उत्पाद के मूल्य में सुधार करेंगे? शायद ऩही।

  • क्या जेनरिक (या जो भी) लोगों के लिए यह कठिन बना देगा कि वे अपना काम करने के लिए पहले से ही काम पर रखे हैं? हाँ।

  • क्या जेनेरिक समय-समय पर बाजार में सुधार करेंगे? यदि एकमात्र इंजीनियर आप थे, हो सकता है। लेकिन अगर कोड की एक और पंक्ति घर में लिखे जाने से पहले इंजीनियरों के एक पूरे समूह को जेनेरिक पर शिक्षित करने की आवश्यकता है, तो नहीं।

इसलिए, आप सिर्फ नौकरी बदलने पर विचार कर सकते हैं। अपनी पिछली नौकरी में मैं जावा के साथ जेनरिक का उपयोग करने वाला पहला व्यक्ति था, और सौभाग्य से उन्हें इससे कोई समस्या नहीं थी; उन्होंने एक चिंता व्यक्त की कि जेनेरिक कोड को 'पढ़ने में कठिन' बनाते हैं, लेकिन उन्होंने मुझे अपना रास्ता बनाने दिया। जैसी नौकरी मिल जाए।


9

मैं किसी भी समीक्षा से पहले कोड समीक्षक और अन्य सहयोगियों के लिए जेनरिक की खूबियों को प्रसारित करूंगा:

1) आपको एक सामान्य वर्ग या विधि द्वारा कार्य किए जाने वाले प्रकारों को निर्दिष्ट करने की अनुमति देकर, जेनेरिक सुविधा आपके लिए टाइप सुरक्षा के बोझ को कंपाइलर पर ले जाती है। सही डेटा प्रकार के परीक्षण के लिए कोड लिखने की आवश्यकता नहीं है क्योंकि यह संकलन समय पर लागू किया जाता है। टाइप कास्टिंग और रन-टाइम त्रुटियों की संभावना कम हो जाती है।

2) पीढ़ी कई कार्यान्वयन के उपरि के बिना प्रकार की सुरक्षा प्रदान करती है।

इसलिए, [1] और [२] कोड में त्रुटि के जोखिम को कम करते हैं। यह डेवलपर समय और इसलिए कंपनी के पैसे बचाता है।

यदि पठनीयता एक मुद्दा है तो जेनेरिक प्रकारों का उपयोग करने की अजीबता से समझौता किया जा सकता है। यह एक कारण है कि आप कोडिंग दिशानिर्देशों का विस्तार करना चाहते हैं। यह एक कार्यदिवस के संदर्भ में किया जा सकता है और न केवल पुस्तकालयों को विस्तारित करने के लिए (हालांकि, यह एक विचार के रूप में है क्योंकि आप जाते हैं और बाद में आसान मान्यता के लिए कोड में पुस्तकालयों के लिए संभावित उम्मीदवार विधियों को चिह्नित करते हैं)। इसलिए, वर्कअडे संदर्भ में उनका उपयोग न करने का कोई कारण नहीं होगा।

मैं इस बारे में कुछ कथन जोड़ूंगा कि अन्य प्रोग्रामर के पास जेनेरिक के साथ समस्याएँ कैसे नहीं हैं: जावा में जेनरिक का व्यापक रूप से उपयोग किया जाता है और कई अन्य भाषाओं जैसे #। किसी भी गंभीर प्रोग्रामर को इस प्रकार के सुरक्षित बिल्डिंग ब्लॉक्स के बिना जीवन मुश्किल लगता है।

फिर भी, आप यह विचार करना चाह सकते हैं कि कुछ डेवलपर्स खरोंच तक नहीं हो सकते हैं। प्रबंधन अतीत में परियोजनाओं की रक्षा के लिए एक सचेत निर्णय ले सकता था, जिससे इन चप्‍पलों को खतरनाक क्षेत्रों से बाहर रखा जा सके। यहां, निर्दोष और दोषी दोनों को आमतौर पर दोष मिलता है क्योंकि पर्याप्त विश्लेषण या सूक्ष्म प्रबंधन शायद ही कभी आयोजित किया जाता है।

यदि आप एक अच्छा मामला सामने रखते हैं और आपको बदले में उचित जवाब नहीं दिया जाता है, तो गुप्त रूप से एक और कंपनी की तलाश शुरू हो जाती है जो प्रोग्रामिंग को गंभीरता से लेती है।


7

जब तक आप आर्किटेक्ट / टेक लीड नहीं हैं तब तक यह बताना मुश्किल होगा कि आपको जेनेरिक / टेम्प्लेट का उपयोग करना चाहिए। आपको वास्तव में कोड की समीक्षा से पहले जेनेरिक / टेम्प्लेट समाधान का प्रस्ताव करना चाहिए, इससे पहले कि आप इसे लागू करना शुरू करें।

आप क्या कर सकते हैं, यह प्रदर्शित करना है कि आपको किसी मामले में सामान्य उपयोग क्यों करना चाहिए। यदि आप लाभ प्रदर्शित कर सकते हैं, तो आपके सहकर्मी सहमत हो सकते हैं। जेनेरिक / टेम्प्लेट का उपयोग करने के संभावित कारण निम्नलिखित होने चाहिए:

  • यह आपको दोहराए जाने वाले कार्यों के लिए कम कोड लिखने देना चाहिए
  • यह प्रोग्रामर का काम आसान कर देता है
  • यह समाधान वास्तुकार द्वारा निर्धारित एक पैटर्न को लागू करता है
  • यह आम विशेषताओं को एनक्रिप्ट करता है, जो प्रोग्रामर्स को कोड-पेस्ट कोड (यानी दोहरे रखरखाव की समस्या से बचने) के लिए मजबूर नहीं करेगा
  • यह भविष्य में आपके कोड का प्रमाण देता है (हालाँकि यह एवेन्यू के बारे में तर्क करना मुश्किल है)

हाल ही के एक जावा प्रोजेक्ट में मैंने कुछ जेनेरिक अमूर्त वर्ग को सफलतापूर्वक जोड़ा क्योंकि यह कुछ बुनियादी चीजों को संतुष्ट करता था: इसने टीम में दूसरों के लिए चीजों को आसान बना दिया, पैटर्न को लागू किया जो वास्तुकार ने पहले से ही प्रस्तावित किया था और इसमें कुछ सामान्य कोड थे जो प्रोग्रामर को करने की आवश्यकता नहीं थी प्रतिलिपि करें और चिपकाएं। यह एक सरल पैटर्न था, जिसके बारे में वास्तुविद ने लिखा था कि सक्षम लोग अभी भी गलत हैं (क्योंकि खेल में वास्तविक प्रणाली की जटिलता के कारण), लेकिन जेनेरिक निशान किस वर्ग में जाते हैं।

जाहिर है मैं गैर-प्रकटीकरण समझौते का उल्लंघन किए बिना वास्तविक उदाहरण नहीं दिखा सकता। लेकिन मैंने जो कुछ भी किया, उसके उदाहरण के रूप में , रणनीति पैटर्न और इसे जेनरिक के साथ लागू करना होगा। तो यह रणनीति पैटर्न है:

यहां छवि विवरण दर्ज करें

और इस पैटर्न को लागू करने के लिए प्रोग्रामर के लिए, आप जेनेरिक प्रकार को Contextइस पर जोड़ सकते हैं कि यह एक ऐसी चीज का उपयोग करना चाहिए जिसमें एक Strategyप्रकार है। कोड-वार यह जावा में कुछ इस तरह दिखेगा:

// declare the generic Context class that has a type "S" 
// that is an upper bound class of Strategy
public class Context <S extends Strategy> {
    S strategy;

    // Constructor with an initial strategy
    public Context(S initialStrategy) {
        this.strategy = initialStrategy;
    }

    public void doSomething() {
      strategy.execute(); // assumes that Strategy has an execute() method.
    }

    public void setStrategy(S strategy) {
        this.strategy = strategy;
    }
}

जहाँ तक मुझे पता है आप किसी भी पैटर्न के साथ यह बहुत ज्यादा कर सकते हैं। सुनिश्चित करें कि आप अपने जेनेरिक / टेम्प्लेट डिज़ाइन को यूनिट परीक्षणों के साथ देख सकते हैं कि यह काम करता है, ताकि कोड डिज़ाइन में विश्वास हो।

यदि आपके सहकर्मियों को यह विचार पसंद नहीं है, तो इसे व्यक्तिगत रूप से न लें, हो सकता है कि यह आपके लिए एक समाधान के रूप में आसान न हो, जैसा कि आपने सोचा था। यही कारण है कि आपको इसे लागू करने से पहले एक सामान्य / टेम्पलेट समाधान का प्रस्ताव देना चाहिए। आपको अभी भी अपने सहयोगियों के साथ मिलकर एक अलग तरीके से वास्तविक समस्या को हल करना है।


आरेख को प्यार करो! आपने किस टूल का उपयोग किया?
यानिस डे

@YannisRizos मैं इस्तेमाल किया yuml.me कि पाठ इनपुट से चित्र बनाता है। बीटा सेवा इस समय थोड़ी छोटी है (हालांकि आप जेनरेट किए गए लिंक का उपयोग करके अपनी पोस्ट पर उत्पन्न चित्र अपलोड कर सकते हैं)।
Spoike

बुकमार्क किया गया, साझा करने के लिए धन्यवाद। हालाँकि मैं वास्तव में अभी तक एक और वाक्यविन्यास नहीं सीखना चाहता हूँ, हालाँकि यह सरल है, यह अच्छा लग रहा है और मैं इसे किसी बिंदु पर जाने दूंगा।
यानिस डे

@YannisRizos ओह, मैं लगातार अपने आप को वाक्यविन्यास भूल जाता हूं। इसलिए एक आसान सैंपल पेज है । मैंने पाया कि Visio का उपयोग करने की तुलना में yuml में सरल वर्ग आरेख लिखना जल्दी होता है।
Spoike

@YannisRizos yUml एक अच्छा उपकरण है। यहाँ कुछ अन्य उदाहरण हैं कि आप इसके साथ क्या कर सकते हैं: carnotaurus.philipcarney.com/tagged/yUML
CarneyCode

4

हमेशा एक ही काम करने के कई तरीके होते हैं। यदि आपका टेम्पलेट्स का उपयोग टेम्पलेट्स का दुरुपयोग है तो यह कोड समीक्षा को विफल कर देना चाहिए।

हालांकि, यदि आपका कोड समीक्षा विफल हो जाता है, क्योंकि वे टेम्पलेट नहीं समझते हैं, तो समस्या अलग प्रकार की है। उस मामले में उन्हें (अच्छे तरीके से) टेम्पलेट सीखने की सलाह दें।


4

आप यहाँ जो काम कर रहे हैं वह पक्षपात का एक संग्रह है। लोग यथास्थिति को पसंद करते हैं, एक समूहवाद विकसित हुआ है, और तर्क को कुछ समय तक मिटा दिया गया है ताकि लोग अपने विश्वासों में फंस गए हैं।

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

इसलिए हर किसी को एक साथ समझाने की कोशिश मत करो: इसका विपरीत प्रभाव पड़ेगा। एक छोटी चीज पर ध्यान दें, और बाकी चीजें अपने आप हो जाएंगी। बस तर्क की दो-तरफा प्रकृति से छुटकारा पाएं ताकि लोग एक साथ सभी के बजाय थोड़ा-थोड़ा करके पार कर सकें।

ध्यान केंद्रित करने के लिए विशिष्ट बिंदु आपकी स्थिति पर निर्भर करता है, लेकिन यहां एक विचार है: आपके द्वारा पुस्तकालयों और 'वास्तविक कोड' के बीच का विभाजन बहुत ही अस्वाभाविक लगता है। मेरे विचार में, एप्लिकेशन बनाने वाले एक प्रोग्रामर को अपने पुस्तकालय का 80% समय उस एप्लीकेशन के प्रकार के लिए बिताना चाहिए जो वह बना रहा है और 20% उस लाइब्रेरी का उपयोग करके एप्लिकेशन का निर्माण करता है। रखने के लायक सभी कोड को एक पुस्तकालय माना जाना चाहिए। मैं आपके वरिष्ठों को सुझाव दूंगा कि आप अपने कुछ कोड को इन-हाउस लाइब्रेरी (यदि आप पहले से ही नहीं है) में सामान्यीकृत करें। अपने स्वयं के तर्क से, उन्हें इसके लिए जेनरिक का उपयोग करना चाहिए, और उपरोक्त अनुमान से, आपके 80% कोड लाइब्रेरी के अंदर समाप्त हो सकते हैं। एक बार जब आप हर किसी को दूसरी तरफ से जेनरिक का उपयोग कर लेते हैं, तो उन्हें इसकी आदत डाल लेनी चाहिए और पक्षपात मिटाना चाहिए।


धन्यवाद पीटर, यह एक बहुत ही व्यावहारिक जवाब था। आपके विचार न केवल मेरे प्रश्न के लिए, बल्कि हमारे दैनिक जीवन के सामान्य दर्शन के लिए भी लागू होते हैं।
Iammilind

2

नोट "समझ में"। यदि कोड समीक्षक को जेनेरिक का लाभ नहीं दिखता है, तो सभी <<<>>>-स्टफ केवल गैर-समझ में आने वाला शोर है जो अनावश्यक है।

मैं सुझाव दूंगा कि कितने वास्तव में, वर्तमान बग (खुले या हाल ही में तय) हैं कि आपके बग डेटाबेस में जेनरिक का उपयोग करके बचा जा सकता है। ClassCastException की तलाश करें।

यह भी ध्यान दें कि यदि आपके पास कोई बग नहीं है जिसे जेनेरिक का उपयोग करके टाला जा सकता था, तो आपके सहयोगियों का एक बिंदु है कि आपको उनकी आवश्यकता नहीं है।


2

मैं इस पर आसान जाना चाहूँगा। मैं कुछ साल पहले जावा 1.4 से 1.6 तक चला गया था, और जेनरिक एक वास्तविक झटका था। यदि आप कुछ संग्रह, मानचित्र और अन्य संरचनाओं को टटोलने का प्रयास कर रहे हैं तो यह सरल और बहुत उपयोगी है। हालांकि, ऐसी कक्षाएं लिखना जो जेनेरिक डेटा को मापदंडों के रूप में लेते हैं, उन्हें हेरफेर करते हैं, और उन्हें अन्य कक्षाओं में पास करते हैं जल्दी से स्मारक रूप से भ्रमित हो जाते हैं। मुझे यह सब काम करने से बहुत संतुष्टि मिलती है, लेकिन आश्चर्य है कि अगर जोड़ा गया समय और प्रयास खर्च करने लायक था। मुझे यह भी डर है कि जावा प्रोग्रामर की अच्छी संख्या कभी भी वास्तव में इसे लटका नहीं सकती है।

मेरी जेनेरिक यात्रा से अब तक के कुछ और यादृच्छिक विचार:

  • क्लासकास्ट एक्सिडेंस रन टाइम पर होते हैं, लेकिन वे आमतौर पर पहले कुछ रनों पर दिखाई देते हैं और उन्हें ठीक करना आसान होता है।
  • जेनेरिक पर पढ़े गए हर लेख में कहा गया है कि कभी-कभी वे सिर्फ काम नहीं करते हैं और आपको @SuppressWarnings(value="unchecked")कभी-कभी उपयोग करने की आवश्यकता होती है । आपको कैसे पता चलेगा कि आप जेनरिक की सीमाओं से परे हैं, या यदि आप सिर्फ बेवकूफ हैं और आपको और कठिन सोचने की जरूरत है?
  • इसे @SuppressWarnings(value="unchecked")सिर्फ एक लाइन पर लागू करना कठिन हो सकता है ।
  • मैंने अपनी कक्षाओं में कुछ फैंसी जेनरिक जोड़े। मैंने कई प्रोग्रामर्स को जाना है जो कक्षा को बढ़ा सकते थे इससे पहले कि मैंने इसे उत्पन्न किया जो इसे कभी नहीं छू सकता था और बाद में एक स्वच्छ संकलन प्राप्त कर सकता था।

जेनरिक ने मेरे कोड को साफ कर दिया है और मुझे इसे अस्वीकार करने के लिए कई बार परेशानी की चेतावनी दी है, लेकिन मैंने विकास के समय में वृद्धि, प्रशिक्षण पर अतिरिक्त समय और जावा प्रोग्रामर को C #, C, और Visual Basic में काम करने के लिए मजबूर किया है। .. या जावा 1.4। मैं अपने सहकर्मियों को समझने के लिए कोड लिखने पर ध्यान केंद्रित करूंगा। यदि आप कुछ समझने योग्य जेनरिक में फिसल सकते हैं, तो बढ़िया। मैं जावा जेनरिक को एक ऐसे अवसर / समस्या के रूप में देखता हूं जिसका अभी तक पता नहीं चला है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.