सामान्य प्रोग्रामिंग आमतौर पर रनटाइम के बावजूद मेटाकोडिंग का एक बहुत ही सरल रूप है। यह सी में प्रीप्रोसेसर की तरह है और अधिकांश उपयोग मामलों और बुनियादी कार्यान्वयन में टेम्पलेट प्रोग्रामिंग से अधिक संबंधित है।
आप अक्सर टाइप की गई भाषाओं में पाएंगे कि आप कुछ ऐसे कुछ कार्यान्वयन बनाएंगे जहां केवल अलग-अलग प्रकार हों। जावा जैसी भाषाओं में यह विशेष रूप से दर्दनाक हो सकता है क्योंकि प्रत्येक वर्ग और इंटरफेस एक नए प्रकार को परिभाषित कर रहा है।
आप उन वर्गों को उन्हें स्ट्रिंग अक्षर में परिवर्तित करके उत्पन्न कर सकते हैं और कक्षा के नाम को एक चर के साथ इंटरपोलेट में बदल सकते हैं।
जहां जेनिक्स रनटाइम में उपयोग किया जाता है, यह थोड़ा अलग है, उस स्थिति में यह चर परिवर्तनीय प्रोग्रामिंग, चर का उपयोग कर प्रोग्रामिंग है।
यह कल्पना करने का तरीका सरल है, फ़ाइलों को ले लो, उनकी तुलना करें और किसी भी चर को अलग करें। अब आपके पास केवल एक फ़ाइल है जो पुन: प्रयोज्य है। आपको केवल यह निर्दिष्ट करना होगा कि क्या अलग है, इसलिए नाम चर।
इस बारे में जेनेरिक कैसे आया कि सबकुछ वैरिएबल प्रकार की तरह वैरिएबल प्रकार की तरह नहीं बनाया जा सकता है, जिसे आप उम्मीद करते हैं या कास्ट प्रकार। अक्सर वहां बहुत सारी फाइल डुप्लिकेशंस होती है, जहां एकमात्र चीज चर थी, वे चर प्रकार थे। यह नकल का एक बहुत ही आम स्रोत था। यद्यपि इसके आस-पास के तरीके हैं या इसे कम करने के लिए वे विशेष रूप से सुविधाजनक नहीं हैं। वेरिएबल प्रकार परिवर्तनीय बनाने की अनुमति देने के लिए जेनेरिक एक चर परिवर्तनीय चर के साथ आ गए हैं। चूंकि चर प्रकार सामान्य रूप से प्रोग्रामिंग भाषा में व्यक्त होता है जिसे अब रनटाइम में निर्दिष्ट किया जा सकता है, इसे एक बहुत ही सरल मामला यद्यपि मेटाकोडिंग भी माना जाता है।
परिवर्तनशीलता नहीं होने का प्रभाव जहां आपको इसकी आवश्यकता है, अपने चर को अनलॉक करना है, जिसे आप प्रत्येक चर के लिए कार्यान्वयन करने के लिए चर बदलने के बजाय मजबूर हैं।
जैसा कि आप कल्पना कर सकते हैं कि यह काफी महंगा है। किसी भी तरह की पुन: प्रयोजन वस्तु भंडारण पुस्तकालय का उपयोग करते समय यह बहुत आम होगा। ये किसी ऑब्जेक्ट को स्वीकार करेंगे लेकिन ज्यादातर मामलों में लोग केवल एक प्रकार का objdct पीड़ित करना चाहते हैं। यदि आप ऑब्जेक्ट को विस्तारित करते हुए एक शॉप ऑब्जेक्ट डालते हैं तो उसे पुनर्प्राप्त करना चाहते हैं, तो स्टोरेज ऑब्जेक्ट पर विधि हस्ताक्षर केवल ऑब्जेक्ट लौटाएगा लेकिन आपका कोड शॉप ऑब्जेक्ट की अपेक्षा करेगा। यह ऑब्जेक्ट के डाउनग्रेड के साथ संकलन तोड़ देगा जबतक कि आप इसे वापस खरीदने के लिए नहीं डालते। यह जेनरिक के बिना एक और conundrum उठाता है संगतता की जांच करने के लिए कोई रास्ता नहीं है और सुनिश्चित करें कि आप जिस वस्तु को संग्रहित कर रहे हैं वह एक दुकान वर्ग है।
जावा मेटाप्रोग्रामिंग से बचाता है और लचीली कोड बनाने के बजाय पॉलीमोर्फिज्म के ओओपी सिद्धांतों का उपयोग करके भाषा को सरल रखने की कोशिश करता है। हालांकि कुछ दबाने और पुनर्विचार की समस्याएं हैं जिनसे अनुभव के माध्यम से खुद को प्रस्तुत किया गया है और न्यूनतम मेटाप्रोग्रामिंग सुविधाओं के अतिरिक्त संबोधित किया गया है। जावा मेटाप्रोग्रामिंग भाषा नहीं बनना चाहता है लेकिन सबसे नाराज समस्याओं को हल करने के लिए वहां से अवधारणाओं को कम से कम आयात करता है।
प्रोग्रामिंग भाषाएं जो लैवेज मेटाकोडिंग सुविधाओं की पेशकश करती हैं, विशेष मामलों, प्रतिबिंब, ओओपी पॉलिमॉर्फिज्म इत्यादि को छोड़ने से बचने के बजाय भाषाओं की तुलना में काफी अधिक उत्पादक हो सकती हैं। हालांकि यह अक्सर un = nderstandable, maintainaiable उत्पन्न करने के लिए बहुत अधिक कौशल और विशेषज्ञता लेता है और बग फ्री कोड। ऐसी भाषाओं के लिए अक्सर एक प्रदर्शन जुर्माना भी होता है जिसमें सी ++ एक विषम गेंद के साथ होता है क्योंकि यह मूल के लिए संकलित होता है।
ऑफ़टॉप भाषाई प्रश्न: vs.s. या बनाम? - "बनाम" बनाम "बनाम" :) –
@ आर्मेन: यह भी सवाल लाता है: "बनाम बनाम बनाम" बनाम "बनाम बनाम बनाम"? – Claudiu
@ क्लाउडियो: और पवित्र रिकर्सन रिकर्स दें! : डी –