टाइप इंट्रोस्पेक्शन

कम्प्यूटिंग में, टाइप इंट्रोस्पेक्शन प्रोग्राम की रन टाइम पर (प्रोग्राम जीवनचक्र चरण) किसी ऑब्जेक्ट(कंप्यूटर विज्ञान) के डेटा प्रकार या गुणों की 'जांच' करने की क्षमता है। कुछ प्रोग्रामिंग भाषाओं में यह क्षमता होती है।

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

रूबी
इस प्रकार से टाइप इंट्रोस्पेक्शन रूबी (प्रोग्रामिंग भाषा) की प्रमुख विशेषता है। रूबी में, ऑब्जेक्ट क्लास (प्रत्येक क्लास का पूर्वज) इंस्टेंस की क्लास चेक करने के विधि Object#instance_of? और Object#kind_of? विधि प्रदान करता है। अतः उत्तरार्द्ध ट्रू हो जाता है जब संदेश भेजा गया विशेष उदाहरण प्रश्न में क्लास के वंशज का उदाहरण होता है। इस प्रकार से उदाहरण के लिए, निम्नलिखित उदाहरण कोड पर विचार करें (आप इसे तुरंत इंटरएक्टिव रूबी शैल के साथ इसे तुरंत प्रयास कर सकते हैं): इस प्रकार से उपरोक्त उदाहरण में, {{code|Class}रूबी में किसी अन्य क्लास के रूप में } क्लास का उपयोग किया जाता है। अतः दो क्लास बनाए गए हैं, A और B, पूर्व बाद वाले का सुपरक्लास है, फिर प्रत्येक क्लास के उदाहरण की जाँच की जाती है। इस प्रकार से अंतिम अभिव्यक्ति ट्रू है क्योंकि A, b के क्लास का एक सुपरक्लास है।

इसके अतिरिक्त, आप प्रत्यक्षतः किसी ऑब्जेक्ट के क्लास के लिए पूछ सकते हैं, और उनकी तुलना कर सकते हैं (अतः नीचे दिए गए कोड को ऊपर दिए गए कोड को निष्पादित करने के लिए मान लिया गया है):

उद्देश्य-सी
इस प्रकार से उद्देश्य सी में, उदाहरण के लिए, जेनेरिक ऑब्जेक्ट और एनएसओब्जेक्ट दोनों (कोको (एपीआई)/ओपनस्टेप में) विधि (कंप्यूटर विज्ञान) isMemberOfClass: प्रदान करते हैं, जो ट्रू लौटाता है यदि विधि का तर्क निर्दिष्ट क्लास का उदाहरण है। अतः प्रक्रिया isKindOfClass: यदि निर्दिष्ट क्लास से तर्क प्राप्त होता है तो समान रूप से ट्रू लौटाता है।

इस प्रकार से उदाहरण के लिए, मान लें कि हमारे निकट Fruit से विरासत में मिला Apple और Orange क्लास है।

अब, eat विधि में हम लिख सकते हैं इस प्रकार से अब जब eat को सामान्य ऑब्जेक्ट (an id) के साथ कॉल किया जाता है, तो फ़ंक्शन सामान्य ऑब्जेक्ट के प्रकार के आधार पर ठीक रूप से व्यवहार करेगा।

C++
इस प्रकार से C++ रन-टाइम प्रकार की सूचना (RTTI) टाइपिड और डायनामिक कास्ट कीवर्ड के माध्यम से प्रकार के इंट्रोस्पेक्शन का समर्थन करता है। अतः {{code|dynamic_cast}st}} अभिव्यक्ति का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कोई विशेष ऑब्जेक्ट किसी विशेष व्युत्पन्न क्लास की है या नहीं। इस प्रकार से उदाहरण के लिए: {{code|typeid}आईडी}} ऑपरेटर std::type_info ऑब्जेक्ट को पुनः प्राप्त करता है जो किसी ऑब्जेक्ट के सबसे व्युत्पन्न प्रकार का वर्णन करता है:

ऑब्जेक्ट पास्कल
इस प्रकार से डेल्फी के मूल रिलीज के बाद से टाइप इंट्रोस्पेक्शन ऑब्जेक्ट पास्कल का भाग रहा है, जो विजुअल फॉर्म डिजाइन के लिए आरटीटीआई का भारी उपयोग करता है। ऑब्जेक्ट पास्कल में, सभी क्लास बेस टॉब्जेक्ट क्लास से उतरते हैं, जो मूलभूत आरटीटीआई कार्यक्षमता को लागू करता है। अतः आरटीटीआई उद्देश्यों के लिए प्रत्येक क्लास के नाम को कोड में संदर्भित किया जा सकता है; क्लास नाम पहचानकर्ता को क्लास के मेटाडेटा के सूचक के रूप में कार्यान्वित किया जाता है, जिसे घोषित किया जा सकता है और टीक्लास प्रकार के चर के रूप में उपयोग किया जा सकता है। इस प्रकार से भाषा में is ऑपरेटर सम्मिलित है, यह निर्धारित करने के लिए कि कोई वस्तु किसी दिए गए वर्ग से है या नहीं, एक as ऑपरेटर, एक टाइप-चेक टाइपकास्ट प्रदान करता है, और कई टीऑब्जेक्ट विधियाँ सम्मिलित हैं। गहन इंट्रोस्पेक्शन (क्षेत्रों और विधियों की गणना) पारंपरिक रूप से मात्र $M+ (एक प्राग्मा) स्थिति में घोषित वस्तुओं के लिए समर्थित है, सामान्यतः टीपरसिस्टेंट, और मात्र प्रकाशित अनुभाग में परिभाषित प्रतीकों के लिए है। अतः डेल्फ़ी 2010 ने इसे लगभग सभी प्रतीकों तक बढ़ा दिया था।

जावा
इस प्रकार से जावा में प्रकार इंट्रोस्पेक्शन का सबसे सरल उदाहरण instanceof ऑपरेटर है। {{code|instanceof}of}} ऑपरेटर यह निर्धारित करता है कि क्या कोई विशेष ऑब्जेक्ट किसी विशेष क्लास (या उस क्लास के उपक्लास, या उस इंटरफ़ेस को लागू करने वाले क्लास) से संबंधित है। इस प्रकार से उदाहरण के लिए:

{{code|java.lang.Class}ss}} क्लास अधिक उन्नत इंट्रोस्पेक्शन का आधार है।

इस प्रकार से उदाहरण के लिए, यदि किसी ऑब्जेक्ट के वास्तविक क्लास को निर्धारित करना वांछनीय है (इसके अतिरिक्त कि क्या वह किसी विशेष क्लास का सदस्य है), Object.getClass और Class.getName उपयोग किया जा सकता है:

पीएचपी
अतः पीएचपी में instanceof ऑपरेटर का उपयोग करके इंट्रोस्पेक्शन किया जा सकता है। इस प्रकार से उदाहरण के लिए:

पर्ल
इस प्रकार से पर्ल में ref और isa का उपयोग करके इंट्रोस्पेक्शन प्राप्त किया जा सकता है।

अतः हम निम्नलिखित क्लास और उनके संबंधित उदाहरणों का इंट्रोस्पेक्शन कर सकते हैं: इनका उपयोग करते हुए:

मेटा-ऑब्जेक्ट प्रोटोकॉल
अतः पर्ल में अधिक शक्तिशाली इंट्रोस्पेक्शन मूस (पर्ल) ऑब्जेक्ट सिस्टम और Class::MOP मेटा-ऑब्जेक्ट प्रोटोकॉल का उपयोग करके प्राप्त किया जा सकता है; इस प्रकार से उदाहरण के लिए, आप जाँच सकते हैं कि कि कोई दिए गए ऑब्जेक्ट X की भूमिका निभाती है या नहीं: इस प्रकार आप उन सभी विधियों के पूर्ण रूप से योग्य नामों को सूचीबद्ध कर सकते हैं जिन्हें ऑब्जेक्ट पर लागू किया जा सकता है, साथ ही उन क्लास के साथ जिनमें उन्हें इस प्रकार से परिभाषित किया गया था:

पायथन
अतः पायथन (प्रोग्रामिंग भाषा) में इंट्रोस्पेक्शन की सबसे सामान्य विधि किसी ऑब्जेक्ट की विशेषताओं का विवरण देने के लिए dir फंक्शन का उपयोग करना है। इस प्रकार से उदाहरण के लिए:

इसके अतिरिक्त, अंतर्निहित फंक्शन type और isinstance का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कोई ऑब्जेक्ट क्या है जबकि hasattr यह निर्धारित कर सकता है कि कोई ऑब्जेक्ट क्या करता है। इस प्रकार से उदाहरण के लिए:

ActionScript (as3)
इस प्रकार से एक्शनस्क्रिप्ट में, फंक्शन  एकपक्षीय ऑब्जेक्ट के क्लास/प्रकार के नाम को पुनर्प्राप्त करने के लिए उपयोग किया जा सकता है। इस प्रकार से वैकल्पिक रूप से, ऑपरेटर  यह निर्धारित करने के लिए उपयोग किया जा सकता है कि कोई ऑब्जेक्ट किसी विशिष्ट प्रकार की है या नहीं: अतः इस दूसरे फ़ंक्शन का उपयोग वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) माता-पिता के परीक्षण के लिए भी किया जा सकता है:

मेटा-टाइप इंट्रोस्पेक्शन
इस प्रकार से पर्ल के जैसे, एक्शनस्क्रिप्ट क्लास का नाम प्राप्त करने से आगे बढ़ सकता है, परन्तु सभी मेटाडेटा, फ़ंक्शंस और अन्य अवयव जो  फंक्शन ऑब्जेक्ट का उपयोग करते हैं; अतः इसका उपयोग एक्शनस्क्रिप्ट में प्रतिबिंब (कंप्यूटर विज्ञान) लागू करते समय किया जाता है।

यह भी देखें

 * संशोधन (कंप्यूटर विज्ञान)
 * टाइपऑफ़

बाहरी संबंध

 * Introspection on Rosetta Code

Introspection (informatique)