आपके पास उस समय होता है जब आप मूल्यों (संख्याओं, तारों, जटिल डेटा संरचनाओं) को एक पहचान और एक समय में जोड़ते हैं।
उदाहरण के लिए, 10 नंबर अपने आप में किसी भी राज्य का प्रतिनिधित्व नहीं करता है: यह सिर्फ एक अच्छी तरह से परिभाषित संख्या है और हमेशा ही होगी: प्राकृतिक संख्या 10. एक अन्य उदाहरण के रूप में, स्ट्रिंग "हेलो" पांच वर्णों का एक क्रम है, और यह पूरी तरह से वर्णों द्वारा वर्णित है और इसमें वह अनुक्रम है जिसमें वे दिखाई देते हैं। अब से पांच मिलियन वर्षों में, स्ट्रिंग "हेलो" अभी भी स्ट्रिंग "हेलो" होगी: एक शुद्ध मूल्य।
राज्य रखने के लिए आपको एक ऐसी दुनिया पर विचार करना होगा, जिसमें ये शुद्ध मूल्य किसी तरह की संस्थाओं से जुड़े हों, जो एक पहचान रखते हों । पहचान एक आदिम विचार है: इसका मतलब है कि आप किसी भी अन्य गुण के बिना दो चीजों को अलग कर सकते हैं। उदाहरण के लिए, एक ही मॉडल की दो कारें, एक ही रंग, ... दो अलग-अलग कारें हैं।
पहचान के साथ इन चीजों को देखते हुए, आप उन्हें शुद्ध मूल्यों द्वारा वर्णित गुणों को संलग्न कर सकते हैं। जैसे, मेरी कार में नीली होने का गुण है। आप जोड़ी को जोड़कर इस तथ्य का वर्णन कर सकते हैं
("colour", "blue")
मेरी कार के लिए। जोड़ी ("रंग", "नीला") उस विशेष कार की स्थिति का वर्णन करने वाला एक शुद्ध मूल्य है ।
राज्य न केवल एक विशेष इकाई से जुड़ा होता है, बल्कि समय के साथ एक विशेष बिंदु से भी जुड़ा होता है। तो, आप कह सकते हैं कि आज, मेरी कार में राज्य है
("colour", "blue")
कल मैं इसे फिर से काले रंग में बदल दूंगा और नया राज्य होगा
("colour", "black")
ध्यान दें कि एक इकाई की स्थिति बदल सकती है, लेकिन इसकी पहचान परिभाषा से नहीं बदलती है। ठीक है, जब तक इकाई मौजूद है, निश्चित रूप से: एक कार बनाई और नष्ट की जा सकती है, लेकिन यह पूरे जीवनकाल में अपनी पहचान बनाए रखेगा। किसी चीज़ की पहचान के बारे में बोलने का कोई मतलब नहीं है जो अभी तक मौजूद नहीं है / कोई और।
यदि किसी दिए गए निकाय से जुड़ी संपत्तियों के मूल्य समय के साथ बदलते हैं, तो आप कहते हैं कि उस इकाई की स्थिति परिवर्तनशील है । अन्यथा, आप कहते हैं कि राज्य अपरिवर्तनीय है ।
सबसे आम कार्यान्वयन कुछ प्रकार के चर (वैश्विक चर, वस्तु सदस्य चर) में एक इकाई की स्थिति को स्टोर करना है, अर्थात किसी राज्य के वर्तमान स्नैपशॉट को संग्रहीत करना । म्यूटेबल स्थिति को असाइनमेंट का उपयोग करके लागू किया जाता है: प्रत्येक असाइनमेंट ऑपरेशन पिछले स्नैपशॉट को एक नए के साथ बदल देता है। यह समाधान आम तौर पर वर्तमान स्नैपशॉट को संग्रहीत करने के लिए मेमोरी स्थानों का उपयोग करता है। मेमोरी लोकेशन को ओवरराइट करना एक विनाशकारी ऑपरेशन है जो एक स्नैपशॉट को एक नए के साथ बदल देता है। ( यहां आप इस जगह उन्मुख प्रोग्रामिंग दृष्टिकोण के बारे में एक दिलचस्प बात कर सकते हैं ।)
एक विकल्प के रूप में एक इकाई (संभवतः अनंत अनुक्रम) के रूप में एक इकाई के बाद के राज्यों (इतिहास) को देखने के लिए एक विकल्प है, उदाहरण के लिए SICP के अध्याय 3 देखें । इस स्थिति में, प्रत्येक स्नैपशॉट को एक अलग मेमोरी स्थान पर संग्रहीत किया जाता है, और प्रोग्राम एक ही समय में विभिन्न स्नैपशॉट की जांच कर सकता है। अप्रयुक्त स्नैपशॉट्स को कचरा एकत्र किया जा सकता है जब उन्हें अब आवश्यकता नहीं होती है।
दो दृष्टिकोण के लाभ / हानि
- दृष्टिकोण 1 कम मेमोरी का उपभोग करता है और नए स्नैपशॉट को अधिक कुशलता से बनाने की अनुमति देता है क्योंकि इसमें कोई प्रतिलिपि शामिल नहीं है।
- दृष्टिकोण 1 अनुमानित रूप से एक कार्यक्रम के सभी भागों में नए राज्य को एक संदर्भ के रूप में धकेलता है, दृष्टिकोण 2 को अपने पर्यवेक्षकों को स्नैपशॉट को पुश करने के लिए कुछ तंत्र की आवश्यकता होगी, जैसे कि एक घटना के रूप में।
- दृष्टिकोण 2 असंगत राज्य त्रुटियों (जैसे आंशिक राज्य अद्यतन) को रोकने में मदद कर सकता है: एक स्पष्ट फ़ंक्शन को परिभाषित करके जो एक पुराने से एक नया राज्य बनाता है यह समय में विभिन्न बिंदुओं पर उत्पादित स्नैपशॉट के बीच अंतर करना आसान है।
- दृष्टिकोण 2 अधिक मॉड्यूलर है जिसमें यह राज्य पर आसानी से विचार करने की अनुमति देता है जो राज्य से स्वतंत्र हैं, जैसे उच्च-क्रम के कार्यों जैसे कि
map
और filter
।