नकारात्मकता पर जोर दें


13

मैं सिर्फ एक लंबे समय तक संपत्ति के नाम के साथ एक बयान लिख रहा था और इस समस्या का सामना करना पड़ा।

मान लें कि हमारे पास इस तरह का एक बयान है:

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
   !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

दूसरी संपत्ति एक बूलियन प्रकार की है और इसका कोई मतलब नहीं है कि इसका स्टैटिमेंट जैसा है

if(boleanValue == true)

क्या नकारात्मकता पर जोर देने के लिए बेहतर तरीका है, ताकि !सामने रखा जा सके । मेरे लिए ऐसा लगता है कि कोड पढ़ते समय यह आसानी से देखा जा सकता है और संभावित रूप से डिबगिंग के साथ समस्याएं पैदा कर सकता है


7
एक सार्थक नाम के साथ एक विधि में हालत निकालें।
जोकिम सॉरे

2
... या एक सार्थक नाम के साथ एक चर के लिए नकारात्‍मक मान असाइन करें और इसके बजाय इसका उपयोग करें।
scrwtp

+1 क्या @JoachimSauer ने कहा, यदि संभव हो तो उस विधि को उस वस्तु पर रखा जाए जो कि विरूद्ध हो रही है .. इस स्थिति में पूरी विधि एक विधि से _someViewModelNameThatIsLong
संलग्न की

2
एक सामान्य बात जो मैं अक्सर करता हूं, वह है कि हर तरफ एक जगह के साथ नकारात्मकता को घेरना ताकि वह अधिक दिखाई दे। if( ! something)बनामif(!something)
शविश

यदि आप उपेक्षा पर जोर दे रहे हैं, तो उपयोग क्यों नहीं ... && model.Prop == false)? व्यक्तिगत रूप से मैं बहुत कम उपयोग करता हूं !, यह अनदेखी करना बहुत आसान है।

जवाबों:


22
if(_someViewModelNameThatIsLong.NeedsMeToDoSomething(someValue))
{
    //Do something
}

और फिर, दृश्य मॉडल ऑब्जेक्ट में

public bool NeedsMeToDoSomething(string someValue)
{
    return AnotherPropertyINeedToCheck == someValue &&
        !ThisIsABooleanPropertyThatIsImportant;
}

(मान लेना someValue एक स्ट्रिंग है और मॉडल ऑब्जेक्ट द्वारा ज्ञात नहीं है)

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


1
+1, यह सूचना विशेषज्ञ सिद्धांत का एक अच्छा अनुप्रयोग है ।
मैटवेवी

1
वर्थ नोटिंग, आपकी स्थिति के आधार पर विधि के someValueलिए एक पैरामीटर होने की आवश्यकता हो सकती NeedsMeToDoSomethingहै।
मैटवेवी

@MattDavey: ओह, अच्छी बात है।
pdr

@pdr हो सकता है कि आप एक ही बूलियन के साथ उस दृश्य मॉडल के लिए एक संपत्ति बनाएं और उस झंडे को अधिक स्थानों पर पुन: उपयोग करें। मुझे यकीन है कि आपको यह आसान लगेगा।
राडू फ्लोरसेकू

5

कम महत्वपूर्ण परिस्थितियों का मूल्यांकन करने से पहले ब्लॉक करें, तो इसे अपने आप में रखें। न केवल अन्य शर्तों के अव्यवस्था के बिना पढ़ना आसान होगा, बल्कि यह भी पहली शर्त है जो एक प्रोग्रामर पढ़ेगा। एक सार्थक नाम के साथ एक चर को असाइन करने के लिए @scrwtp द्वारा पहले से बताए गए विचार के साथ इसे मिलाएं और आप प्राप्त करें:

var isValid = !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant;
if( isValid ) 
{
    if( _someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue ) 
    {
        //Do something
    }
}

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


2

यदि आप C / C ++ का उपयोग कर रहे हैं तो पूर्वप्रक्रमक पठनीयता प्रदान कर सकता है।

#define NOT !

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
    NOT _someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

या शायद ... फ़ंक्शन नहीं (x) {रिटर्न! x! } // जावास्क्रिप्ट
एलेक्स

2
सी और सी ++ में ऑपरेटर विभिन्न ऑपरेटरों के लिए पहले से ही मानक समानार्थक शब्द हैं।
जोएल

0

मैं अभी निकालूंगा

`!_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant`

एक विधि में जो इसे लौटाता है। यदि आप इस विधि का नाम NotThisIsABooleanPropertyThatIsImportant है तो आपको ठीक होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.