2013-04-27 8 views
5

कंप्यूटर विज्ञान में, कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो गणितीय कार्यों के मूल्यांकन के रूप में गणना का व्यवहार करता है और राज्य और परिवर्तनीय डेटा से बचाता है।क्या कोई मुझे बता सकता है कि राज्य और परिवर्तनीय डेटा क्या है?

http://en.wikipedia.org/wiki/Functional_programming

किसी को भी मुझे बता सकते हैं राज्य और परिवर्तनशील डेटा क्या है? क्या कोई मुझे जावा या जावास्क्रिप्ट में उदाहरण दे सकता है।

उत्तर

6

उत्परिवर्तनीय कुछ भी बदल सकता है जो बदल सकता है, यानी।एक int

int a = 0; 
System.out.prtinln(a); //prints 0 
a = 2; 
System.out.prtinln(a); //now prints 2, so its mutable 

जावा में एक स्ट्रिंग अपरिवर्तनीय है। आप केवल स्ट्रिंग मान को इसके संदर्भ में नहीं बदल सकते हैं।

String s1 = "Hello"; 
System.out.println(s1); //prints Hello 
String s2 = s1; 
s1 = "Hi"; 
System.out.println(s2); //prints "Hello" and not "Hi" 

राज्य ऐसा कुछ है जो कक्षा के एक उदाहरण (एक वस्तु) होगा।

एक वस्तु उसके गुण के लिए कुछ खास मान हैं तो इसके लिए एक अलग राज्य में तो अलग विशेषता के साथ एक ही कक्षा की एक और वस्तु को महत्व देता

+0

कोई भी इसे बेहतर समझा सकता है? o.o –

1

मान लीजिए int i = 5;

अब चर के राज्य मैं कि, अब यह निहित है मूल्य 5.

अब लगता है मैं मैं = 7 स्थापित किया है है;

अब चर के राज्य मैं कि, अब यह निहित है मूल्य 7, यह जगह 5.

अगर मूल्य में परिवर्तन तो संभव इसका मतलब है कि के रूप में-परिवर्तनशील कहा जाता है है हम बदल सकते हैं यहां राज्य

यदि मूल्य में परिवर्तन संभव नहीं है तो इसे अपरिवर्तनीय कहा जाता है।

+0

और इस पर निर्माण, एक वस्तु का राज्य अपने सभी क्षेत्रों की स्थिति पर आधारित है। यदि किसी ऑब्जेक्ट के फ़ील्ड में से कोई एक स्थिति बदलता है, तो ऑब्जेक्ट स्थिति बदल जाती है। यदि किसी ऑब्जेक्ट के फ़ील्ड ** ** ** राज्य बदल सकते हैं, तो ऑब्जेक्ट को म्यूटेबल माना जाता है। यदि किसी ऑब्जेक्ट के फ़ील्ड स्थिति को बदल नहीं सकते हैं (ऑब्जेक्ट बनने के बाद), इसे अपरिवर्तनीय माना जाता है। –

6

राज्य वस्तु में संग्रहीत डेटा को सामूहिक रूप से संदर्भित करता है जो वस्तु के वर्तमान गुणों को निर्धारित करता है। उदाहरण के लिए, यदि आपके पास BankAccount ऑब्जेक्ट है, तो खाते का स्वामी और इसमें धनराशि की राशि राज्य खाते का प्रतिनिधित्व करती है।

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


+ उत्परिवर्तनीय "बदलने योग्य" के लिए एक फैंसी शब्द है।

+1

जिसे आप "nonmutable state" कहते हैं, मैं "मूल्य" कहूंगा। – NovaDenizen

2

एक अपरिवर्तनीय वस्तु का एक क्लासिक उदाहरण जावा स्ट्रिंग क्लास का एक उदाहरण है।

String s = “ABC”; 

s.toLowerCase(); 

System.out.println(s); 

आउटपुट = एबीसी

इसका कारण यह है रों अपने अपरिवर्तनीय स्ट्रिंग संदर्भित जारी है। आप रों उत्परिवर्तित चाहते हैं, एक अलग दृष्टिकोण की जरूरत है:

s = s.toLowerCase(); 

यह एक नई संदर्भ पैदा करेगा। अब स्ट्रिंग एस एक नई स्ट्रिंग ऑब्जेक्ट का संदर्भ देता है जिसमें "abc" शामिल है।

3

परिवर्त्य राज्य सब कुछ है कि एक समारोह में एक अलग मूल्य वापस कर सकते हैं, के बावजूद यह किया जा रहा है एक ही तर्क के साथ बुलाया।

जावा में सरल उदाहरण:

public static double badSqrt(double x) { 
    double r = Math.sqrt(x); 
    if (System.currentTimeMillis() % 42L == 0L) return r; 
    return r + 0.000000001; 
} 

इस समारोह में एक से थोड़ा गलत परिणाम कभी कभी गणना करता है। हम कहते हैं कि badSqrt अशुद्ध है, क्योंकि इसका परिणाम पूरी तरह से अपने तर्क (और स्थिरांक) पर निर्भर नहीं है।

किसी ऐसे प्रोग्राम को डिबग करने वाले व्यक्ति के लिए जिसमें BadSqrt() या सामान्य रूप से अशुद्ध कार्य शामिल हैं, यह एक दुःस्वप्न है। अक्सर, कार्यक्रम काम करता प्रतीत होता है, लेकिन थोड़ी देर में, गलत परिणाम वितरित किए जाते हैं। जब तक कि फ़ंक्शन स्पष्ट रूप से प्रलेखित नहीं होता है या स्रोत कोड उपलब्ध नहीं होता है, तब तक बग को ट्रैक करना मुश्किल होगा।

ऐसे मामलों में, यह कहा जाता है कि कार्यों का व्यवहार उत्परिवर्तनीय स्थिति पर निर्भर करता है। यह वह राज्य है जिसे प्रोग्राम के पूरी तरह से असंबंधित हिस्सों द्वारा बदला जा सकता है (या उत्परिवर्तित), उदाहरण के लिए, प्रोग्राम (ऑपरेटिंग सिस्टम) द्वारा।

संबंधित मुद्दे