इनडायरेक्शन

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

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

अवलोकन
बटलर लैम्पसन का एक प्रसिद्ध सूत्र इस प्रकार है: "कंप्यूटर विज्ञान में सभी समस्याओं को अप्रत्यक्ष स्तर के दूसरे स्तर से हल किया जा सकता है" ("सॉफ़्टवेयर इंजीनियरिंग का मौलिक प्रमेय")। इसे अक्सर "अप्रत्यक्ष स्तर" के स्थान पर "अमूर्त परत (अब्स्ट्रक्शन लेयर)" के साथ अभिप्रायपूर्वक गलत तरीके से उद्धृत किया जाता है। इसका अक्सर उद्धृत परिणाम यह है, "...अप्रत्यक्ष की बहुत सारी परतों की समस्या को छोड़कर।"

अप्रैल फूल दिवस पर टिप्पणियों के लिए अनुरोध,, जोर देकर कहते हैं कि: "(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall network architecture) than it is to solve it.
 * (6a) (corollary). It is always possible to add another level of indirection.

(6) किसी समस्या को हल करने की तुलना में उसे चारों ओर ले जाना आसान है (उदाहरण के लिए, समस्या को समग्र नेटवर्क आर्किटेक्चर के एक अलग हिस्से में ले जाना)।
 * (6A) (परिणाम)। अप्रत्यक्षता का एक और स्तर जोड़ना हमेशा संभव होता है।"

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

पुनरावर्ती डेटा प्रकार सामान्यतः अप्रत्यक्ष रूप से कार्यान्वित किए जाते हैं, क्योंकि अन्यथा यदि किसी डेटाटाइप के मान में उसी डेटाटाइप के किसी अन्य मान की संपूर्णता सम्मिलित हो सकती है, तो इस डेटाटाइप के मान के आकार की कोई सीमा नहीं हो सकती है।

औपचारिक गणितीय विनिर्देश से सिंबॉलिक प्रोग्रामिंग करते समय अप्रत्यक्ष का उपयोग काफी सहायक हो सकता है। एक समीकरण में चर x, y और z जैसे सरल उदाहरण से प्रारंभ करें $z = \sqrt{ x^2 + y^2}$ किसी भी संख्या का उल्लेख कर सकते हैं. कोई विभिन्न संख्याओं के लिए वस्तुओं की कल्पना कर सकता है और फिर x, y और z किसी विशेष समस्या के लिए उपयोग की जाने वाली विशिष्ट संख्याओं को इंगित कर सकता है। सरल उदाहरण की अपनी सीमा है क्योंकि इसमें अपरिमित रूप से अनेक वास्तविक संख्याएँ हैं। सिंबॉलिक प्रोग्रामिंग के विभिन्न अन्य भागों में केवल इतने ही प्रतीक हैं। तो एक अधिक महत्वपूर्ण उदाहरण पर आगे बढ़ने के लिए, तर्क में सूत्र α किसी भी सूत्र को संदर्भित कर सकता है, इसलिए यह β, γ, δ, ... या η→π, ς ∨ σ, हो सकता है ... जब सेट-बिल्डर नोटेशन को नियोजित किया जाता है तो कथन Δ={α} का अर्थ सभी सूत्रों का सेट होता है - इसलिए हालांकि संदर्भ α का है, यहां संकेत के दो स्तर हैं, पहला सभी α के सेट पर और फिर दूसरा सेट Δ में α की प्रत्येक घटना के लिए एक विशिष्ट सूत्र है।

यह भी देखें

 * हैंडल (कंप्यूटिंग)
 * प्रतिनिधिमंडल पैटर्न
 * पॉइंटर (कंप्यूटर प्रोग्रामिंग)
 * संदर्भ (कंप्यूटर विज्ञान)
 * डेरेफ़रेंस ऑपरेटर
 * डेमेटर का नियम