अनडू (पूर्ववत)

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

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

अनडू कार्यक्षमता के सामान्य घटक वे आदेश हैं जो उपयोगकर्ता द्वारा निष्पादित किए गए थे, इतिहास बफ़र जो पूर्ण किए गए कार्यों को संग्रहीत करता है, इतिहास बफ़र को नियंत्रित करने के लिए अनडू/फिर से करें प्रबंधक, और उपयोगकर्ता के साथ इंटरैक्ट करने के लिए उपयोगकर्ता इंटरफ़ेस। अधिकांश Microsoft Windows अनुप्रयोगों में, अनडू कमान कुंजी  लिए  कुंजीपटल संक्षिप्त रीति  Control-Z|Ctrl+Z या Alt+Backspace है, और फिर से करने के लिए शॉर्टकट Control-Y|Ctrl+Y या Control key+Shift key+Z है।

अधिकांश Apple macintosh अनुप्रयोगों में, अनडू कमांड का शॉर्टकट कमांड की-जेड है, और रीडो के लिए शॉर्टकट कमांड की-शिफ्ट की-जेड है।

सभी प्लेटफॉर्म पर, अनडू/फिर से करें कार्यों को संपादन मेनू के माध्यम से भी एक्सेस किया जा सकता है।

इतिहास
लोगों द्वारा कंप्यूटर का उपयोग करने के तरीके के जवाब में कंप्यूटर पर किसी ऑपरेशन को अनडू करने की क्षमता का स्वतंत्र रूप से कई बार आविष्कार किया गया था। ब्राउन विश्वविद्यालय में 1968 में शुरू हुई  फ़ाइल पुनर्प्राप्ति और संपादन प्रणाली  के बारे में कहा जाता है कि यह पहली कंप्यूटर-आधारित प्रणाली है, जिसमें अनडू फीचर है। वारेन टिटेलमैन ने 1971 तक अनडू कार्य के साथ BBN-LISP के भाग के रूप में एक प्रोग्रामर सहायक विकसित किया। ज़ेरॉक्स PARC ब्रावो (सॉफ्टवेयर) टेक्स्ट एडिटर के पास 1974 में एक अनडू कमांड था। आईबीएम के लांस ए. मिलर और जॉन सी. थॉमस की 1976 की एक शोध रिपोर्ट, इंटरएक्टिव सिस्टम के उपयोग में व्यवहारिक मुद्दे, नोट किया गया कि यह उपयोगकर्ताओं को कम से कम तत्काल पूर्ववर्ती आदेश (कुछ विशेष 'अनडू करें' आदेश जारी करके) 'वापस लेने' की अनुमति देने के लिए काफी उपयोगी होगा। PARC (कंपनी) अनुसंधान केंद्र के प्रोग्रामरों ने कीबोर्ड शॉर्टकट Ctrl-Z को अनडू आदेश दिया, जो व्यक्तिगत कंप्यूटर युग में पाठ संपादकों और वर्ड प्रोसेसर की एक महत्वपूर्ण विशेषता बन गई। 1980 में, ज़ेरॉक्स PARC के लैरी टेस्लर ने Apple कंप्यूटर में काम करना शुरू किया। वहाँ, उन्होंने और बिल एटकिंसन ने Apple लिसा पर एक मानक स्थिरता के रूप में एक अनडू आदेश की उपस्थिति की वकालत की। एटकिन्सन लिसा के एप्लिकेशन सॉफ़्टवेयर के व्यक्तिगत डेवलपर्स को अनडू और फिर से करने के एकल स्तर को सम्मलित करने में सक्षम था, लेकिन कई स्तरों के लिए पैरवी करने में असफल रहा। जब Apple ने लिसा के उत्तराधिकारी, Macintosh को पेश किया, तो यह निर्धारित किया गया कि सभी मानक अनुप्रयोगों में "संपादन" मेनू में पहले आदेश के रूप में "अनडू करें" सम्मलित होना चाहिए, जो आज तक macOS और Windows पर मानक बना हुआ है।

बहु-स्तरीय अनडू आदेश 1980 के दशक में पेश किए गए थे, जिससे उपयोगकर्ता न केवल सबसे हालिया बल्कि कई कार्यों को वापस ले सकते थे। व्यक्तिगत कंप्यूटर सॉफ़्टवेयर से पहले EMACS और अन्य टाइमशेयर स्क्रीन संपादकों के पास यह था। सिग्नस एड पहला अमीगा पाठ संपादक था जिसमें असीमित अनडू / फिर से सुविधा थी। AtariWriter, 1982 में पेश किया गया एक वर्ड-प्रोसेसिंग एप्लिकेशन, अनडू चित्रित किया गया। NewWord, 1984 में NewStar द्वारा जारी किया गया एक अन्य वर्ड-प्रोसेसिंग प्रोग्राम था, जिसमें एक अनरेज़ कमांड था। IBM के VisiWord के पास एक अनडिलीट कमांड भी था।

मॉडल अनडू करें और फिर से करें
अनडू मॉडल को रैखिक या गैर-रैखिक के रूप में वर्गीकृत किया जा सकता है। गैर-रैखिक अनडू मॉडल को स्क्रिप्ट मॉडल, यूएस के मॉडल, ट्रायडिक मॉडल और चयनात्मक अनडू में उप-वर्गीकृत किया जा सकता है।

मॉडल के कुछ सामान्य गुण हैं:


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

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

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

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

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

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

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

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

प्रत्यक्ष चयनात्मक अनडू करें
प्रत्यक्ष चयनात्मक अनडू एक इतिहास वृक्ष के साथ प्रतिबंधित रेखीय अनडू का विस्तार है। ऑपरेशन चयनित कमांड की एक प्रति बनाता है, इसे निष्पादित करता है और इसे इतिहास सूची में जोड़ता है। वहाँ दो गैर-रैखिक संचालन चयनात्मक अनडू और चयनात्मक फिर से परिभाषित किए गए हैं, इसलिए यह अधिक सममित है।

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

जहां अनडू का उपयोग कई संपादनों के माध्यम से बैकट्रैक करने के लिए किया जा सकता है, फिर से करें आदेश क्रिया इतिहास के माध्यम से आगे बढ़ता है। नया संपादन करने से सामान्यतः फिर से की जाने वाली सूची साफ़ हो जाती है। यदि एक ब्रांचिंग रीडो मॉडल का उपयोग किया जाता है, तो नया संपादन क्रिया इतिहास को शाखाबद्ध करता है।

अनडू की जा सकने वाली पिछली कार्रवाइयों की संख्या प्रोग्राम, संस्करण और हार्डवेयर या सॉफ़्टवेयर क्षमताओं के अनुसार भिन्न होती है। उदाहरण के लिए, Adobe Photoshop में डिफ़ॉल्ट अनडू करें/फिर से करें स्टैक आकार 20 है लेकिन उपयोगकर्ता द्वारा इसे बदला जा सकता है। दूसरे उदाहरण के रूप में, पहले Microsoft पेंट के संस्करणों को अनडू करने के लिए केवल तीन संपादनों तक की अनुमति है; विंडोज 7 में पेश किए गए संस्करण ने इस सीमा को बढ़ाकर 50 कर दिया।

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

कार्यान्वयन अनडू करें
अनडू विभिन्न पैटर्न के माध्यम से लागू किया जा सकता है। कमांड पैटर्न और स्मृति चिन्ह पैटर्न  सबसे आम पैटर्न हैं।

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

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

मेमेंटो पैटर्न में अनडू मैकेनिज्म को केयरटेकर कहा जाता है। यह स्मृति चिन्हों को सुरक्षित रखने के लिए जिम्मेदार है लेकिन इनकी सामग्री को कभी नहीं बदलें। अनडू करने के लिए कार्यवाहक प्रवर्तक के एक स्मृति चिन्ह का अनुरोध करता है और फिर अनडू आवेदन करता है।

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

प्रत्येक कमांड क्लास में एक डू विधि होती है जिसे कमांड निष्पादित होने पर कहा जाता है। अनडू-मेथड डू-मेथड के रिवर्स ऑपरेशन को लागू करता है। रिवर्स को लागू करने के लिए कई अलग-अलग रणनीतियां हैं।


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

यह भी देखें

 * प्रतिवर्ती कंप्यूटिंग
 * रोलबैक (डेटा प्रबंधन)
 * हटाना
 * संस्करण नियंत्रण (देशी और विदेशी प्रारूप)

बाहरी संबंध

 * The Age of अनडूing - Article about the linguistic history of अनडू at The New York Times Magazine.
 * Cascading अनडू control - a paper focused on what is cascading अनडू and how it might be presented to users