2011-03-23 9 views
8

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

int x = 1; 
int initialx = x; 

...//code that may or may not change the value of x 

if (x!=initialx){ 
    doOneTimeTaskIfVariableHasChanged(); 
    initialx = x; //reset initialx for future change tests 
} 

क्या ऐसा करने का एक बेहतर/सरल तरीका है?

+0

संदर्भ के लिए, मुझे यह संबंधित (हालांकि खराब पूछा गया) प्रश्न मिला: http://stackoverflow.com/q/3051114/431327 – Amplify91

+1

नहीं। कुछ भी आसान नहीं है। आप अपने कोड को उस ऑब्जेक्ट में लपेटना चाहते हैं जहां एक्स ऑब्जेक्ट के अंदर रहता है और 'if (x! =itialx) {...}' इस ऑब्जेक्ट का एक तरीका है। लेकिन यह अधिक जटिल लग रहा है समाप्त हो सकता है। –

+0

लेकिन यह केवल तब निर्धारित होगा जब स्क्रिप्ट निष्पादित की जाती है, इस स्क्रिप्ट को निष्पादित करने से पहले एक चर वैल्यू बदल सकता है। इसके अलावा जावास्क्रिप्ट मल्टीथ्रेडिंग का समर्थन नहीं करता है, जावा अलग-अलग मामले –

उत्तर

5

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

public class X 
{ 
    private int x = 1; 

    //some other code here 

    public void setX(int proposedValueForX) 
    { 
     if(proposedValueForX != x) 
     { 
      doOneTimeTaskIfVariableHasChanged(); 
      x = proposedValueForX; 
     } 
    } 
} 
4

आप प्रत्येक फ़ील्ड से जुड़े गंदे बिट के साथ गेटर/सेटर का उपयोग कर सकते हैं। अगर सेटटर के माध्यम से मूल्य बदल जाता है, तो इसे गंदे चिह्नित करें, और उपयोगकर्ता को सेटर्स

+0

क्या आप थोड़ा और समझा सकते हैं? यह दिलचस्प लगता है, लेकिन मैं प्रोग्रामिंग के लिए नया हूं और मैंने पहले गंदे बिट्स का उपयोग नहीं किया है। मुझे यकीन है कि इस सवाल पर आने वाले अन्य लोग भी इसकी सराहना करेंगे! – Amplify91

+0

यह थोड़ा सा आसान है, जो आप देख रहे चीजों पर कुछ संशोधन पर सेट हो जाता है। –

0

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

इस तरह से प्रदर्शन के आधार पर गेटर्स और सेटर्स होने से बेहतर है, दो तरीकों के गेटर्स और सेटर्स का अनावश्यक कोड नहीं है।

0

आप एक वस्तु की निगरानी बना सकते हैं और के लिए इंतजार कर सकता है सभी अवरुद्ध धागे जागने के लिए वस्तु बदल दी।

कुछ इस तरह:

एक चर बनाने:

private MyObject myObject; 

... other thread ... 
while(true) { 
    myObject.wait() 
    logic you want to run when notified. 
} 
... other thread ... 

... later on ... 

myObject.change(); 
myObject.notifyAll(); 
2

उदाहरण है एक नंबर के साथ एक ही नाम के साथ।

int var1; 
int var2; 

if(var1 != var2) 
{ 
//do the code here 

var2 = var1; 
} 

इस सहायता की आशा करें।

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

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